数字三角形问题,动态规划法,C语言编写

从数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大,路径上的每一步都只能往左下或右下走。共有n行,由文件input.txt给出输入数据,文件第一行为... 从数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大,路径上的每一步都只能往左下或右下走。共有n行,由文件input.txt给出输入数据,文件第一行为行数n,各行中的数字在0~99之间。程序运行结束,将结果输出到文件output.txt中,其中第一行为计算最大值。
求大神给出c代码,并用txt格式将代码发送到164625109@qq.com.感谢!
展开
 我来答
xiaobomo
推荐于2016-05-30 · TA获得超过522个赞
知道小有建树答主
回答量:533
采纳率:100%
帮助的人:360万
展开全部
/************************************************************************/
/****************************** UESTC xiaobo ****************************/
/************************************************************************/

# include <stdio.h>
# include <stdlib.h>
# define N (50)

int data[N*N];
int mat[N][N];
int max[N][N];

void print(int m[][N], int row, int col)
{
int i,j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf("%d\t",m[i][j]);
}
printf("\n");
}
}

/************************************************************************/
/* 动态规划: max[x][y]=mat[x][y]+max(mat[x+1][y-1],mat[x+1][y+1]) */
/************************************************************************/
int getMax(int m[][N], int row, int col)
{
int i,j;
int ans;

for(j=0;j<col;j++)
{
max[0][j]=m[0][j];
}

for(i=1;i<row;i++)
{
for(j=0;j<col;j++)
{
if(j==0)
{
max[i][j]=mat[i][j]+max[i-1][j+1];
}
else if(j==col-1)
{
max[i][j]=mat[i][j]+max[i-1][j-1];
}
else
{
if(mat[i-1][j-1]>mat[i-1][j+1])
{
max[i][j]=mat[i][j]+max[i-1][j-1];
}
else
{
max[i][j]=mat[i][j]+max[i-1][j+1];
}
}
}
}

print(max,row,col);
ans=max[row-1][0];
for(j=1;j<col;j++)
{
if(max[row-1][j]>ans)
{
ans=max[row-1][j];
}
}

return ans;
}

int main()
{
int i,j;
int row,col;
int count=0;
int temp;
int ans;
FILE *fin=fopen("input.txt","r");
FILE *fout=fopen("output.txt","w");
if(fin==NULL)
{
perror("input.txt");
exit(EXIT_FAILURE);
}
if(fout==NULL)
{
perror("output.txt");
exit(EXIT_FAILURE);
}

fscanf(fin,"%d",&row);
while(fscanf(fin,"%d",&temp)!=EOF)
{
data[count++]=temp;
}

col=count/row;
if(col<2)
{
printf("input error!");
exit(EXIT_FAILURE);
}

for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
mat[i][j]=data[i*col+j];
printf("%d\t",mat[i][j]);
}
printf("\n");
}
printf("\n");

ans=getMax(mat,row,col);
printf("\nans: %d\n",ans);
fprintf(fout,"%d",ans);

fclose(fin);
fclose(fout);

system("pause");
return 0;
}


--
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有... 点击进入详情页
本回答由--提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式