C 在二维数组中寻找路径最大值
万圣节即将来临,是玩不给糖就捣蛋的时候了。您居住在n-by-n城镇地图的左上角,前往位于右下角的万圣节派对。在你的旅行中,你决定参观最少数量的房子以获得款待。你有一张城镇地图,上面有食物数量的信息≥ 0在每个位置都可用。例如,n=3的城镇地图如下所示 6 8 2 4 5 1 3910 为了得到最大的款待,你将从6号家开始,然后向东到8号家,再向南到5号家,再向南到9号家,再向东到10号家,最后到达派对 所以治疗的次数是6+8+5+9+10=38 请注意,要访问最少数量的房屋,您必须从一个房屋向东或向南旅行到下一个房屋,直到到达聚会地点。要获得最大款待,请在访问每家时跟踪当前最大款待 6,14,2+14=16 10,5+max10,14=19 3+10=13 所以程序需要选择要加的最大值,比如10和14,我会选择加14。但是我在使用for循环时遇到了问题。有人能帮忙吗 1包括 2. 3定义尺寸10 4. 5 int-pathmaxint-map[][SIZE],int-n; 6无效读入图[]尺寸],内部n; 7整数最大整数x,整数y; 8. 9 int mainvoid 10 { 11整数映射[大小][大小],n; 12 13印刷工n:; 14扫描%d,&n; 15 16读图,n; 17 18 printfmax:%d\n,路径maxmap,n; 19 20返回0; 21 } 22 23整数最大整数x,整数y 24 { 25如果x>y 26返回x; 27其他 28返回y; 29 } 30 31 int-pathmaxint映射[][SIZE],int n 32 { 33 int k,i,j; 34 35表示k=1;k<2*n-1;k++ 36表示i=0;iC 在二维数组中寻找路径最大值,c,C,万圣节即将来临,是玩不给糖就捣蛋的时候了。您居住在n-by-n城镇地图的左上角,前往位于右下角的万圣节派对。在你的旅行中,你决定参观最少数量的房子以获得款待。你有一张城镇地图,上面有食物数量的信息≥ 0在每个位置都可用。例如,n=3的城镇地图如下所示 6 8 2 4 5 1 3910 为了得到最大的款待,你将从6号家开始,然后向东到8号家,再向南到5号家,再向南到9号家,再向东到10号家,最后到达派对 所以治疗的次数是6+8+5+9+10=38 请注意,要访问最少数量的房屋,您必须从一个房屋向东
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXTREAT 10
#define GRID 3
int map [GRID][GRID];
int maxtreats;
void explore(int x, int y, int treats)
{
treats += map [y][x];
if (x == GRID-1 && y == GRID-1) { // reached bottom right?
if (treats > maxtreats) // check result
maxtreats = treats; // finish recursion
} else { // recurse
if (x+1 < GRID)
explore (x+1, y, treats); // go east
if (y+1 < GRID)
explore (x, y+1, treats); // go south
}
}
int main()
{
int x, y;
srand ((unsigned int)time(NULL)); // seed random num gen
for (x=0; x<GRID; x++) { // set up random map
for (y=0; y<GRID; y++) {
map[y][x] = 1 + rand() % MAXTREAT;
printf ("%4d", map[y][x]);
}
printf ("\n");
}
explore (0, 0, 0);
printf ("Max treats %d\n", maxtreats);
return 0;
}
看起来今年不会有人得到很多糖果。因为这是一个家庭作业,所以试试你的教授。因为循环与你不能选择最多两个数字无关。这可以通过条件if或?:运算符和=。