整数の三角迷路で最大値のパスを見つけるプログラムを作成する必要があります。
- このプログラムは、最上部から始まり、ベースのどこかで終わるルートで渡された数値の最大合計を計算する必要があります。
- 各ステップは、左斜め下または右斜め下のいずれかに進むことができます。
- 三角形の行数は > 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;
}