我必须编写一个程序,在整数的三角形迷宫中找到最大值的路径。
- 该程序应计算从顶部开始到底部某处结束的路线上传递的最大数字总和。
- 每一步都可以对角线向左或向右对角线向下。
- 三角形中的行数 > 1 但 <= 100。
- 三角形中的数字都是整数,介于 0 和 99 之间。
我的功能有问题fscanf
。由于某种原因它不读。我将非常感谢任何帮助或建议,因为该项目将尽快到期。
这是一个迷宫的例子:
30
47 1
35 65 21
0 74 94 58
71 29 34 28 60
97 6 29 19 26 68
37 1 48 98 57 89 64
60 38 33 23 49 57 19 50
4 83 52 47 84 60 16 56 90
19 59 6 10 97 47 96 93 59 50
这就是我到目前为止所得到的:
/#include <stdio.h>
/#include <stdlib.h>
/#define MAX 100
void read (int maze [][MAX]);
int findPath (int maze[][MAX], int map[][MAX], int size);
void print (int map [][MAX]);
int main()
{
int maze [][MAX] = {};
int map [][MAX] = {};
int sum = 0;
int size = MAX;
read (maze);
findPath (maze, map,size);
print (map);
return;
}
void read (int maze[][MAX])
{
FILE * mazeFile;
int num, r, c, count;
if ((mazeFile = fopen ("t4.txt", "r")) == NULL)
{
printf ("Error opening a file\n");
}
else
{
while (mazeFile != EOF)
{
fscanf (mazeFile, "%d", &maze[r][c]);
for (r = 0; r < 100 ; r++)
{
count = r + 1;
for (c = 0; c <= count; c++)
{
printf ("(%d, %d) = %d\n",r, c, maze[r][c]);
}
}
fclose (mazeFile);
return;
}
}
}
int findPath (int maze[][MAX], int map[][MAX], int size)
{
int sum [MAX][MAX] = {0};
int row, col, maxNum;
for(row=(size-1); row >= 1; --row)
{
for (col-row;col>=1;--col)
{
maxNum = (sum[row+1][col] > sum [row+1][col+1] ? col : col + 1);
sum[row][col]= maze[row][col] + sum [row+1][maxNum];
map[row][col] = maxNum;
}
}
return sum [0][0];
}
void print (int map [][MAX])
{
printf ("(%d, %d) = ", map[0][0], map[0][1]);
return;
}