C语言编程题:滑雪 问题

Python043

C语言编程题:滑雪 问题,第1张

你这里面问题太多了!

1、num()设置成了无返回值函数,但是你在实际应用的时候当成有返回值函数在用。

2、max函数名字要变一下,这个不给用

3、b[x][y-1]==1? 这算什么意思?是不是改成if(b[x][y-1]==1)

4、num(x,y-1):(b[x][y])这是什么意思?冒号运算符?看不懂!

#include<stdio.h>//滑雪、、搜索+动态规划

#define max(a,b) a>b?a:b

int m,n

int map[105][105]

int step[105][105]//动态规划出最大的step-length

bool hash[105][105]//标记是否被走过

int dir[4][2]={-1,0,1,0,0,1,0,-1}//四个方向

int bfs(int x,int y)//写错了,这是深搜得代码。不是广搜

{

int count=0,i

if(step[x][y]!=1)return step[x][y]//返回已经确定的最优step

for(i=0i<4i++)

{

int a=x+dir[i][0]

int b=y+dir[i][1]

if(a>=0&&a<m&&b>=0&&b<n&&map[a][b]>map[x][y])//判断该点是否可以走

count=max(count,bfs(a,b))//递归调用向四个方向寻找

}

step[x][y]=count+step[x][y]//统计step

return step[x][y]//返回step

}

int main()

{

int i,j

while(scanf("%d %d",&m,&n)!=EOF)

{

int ans=0

for(i=0i<mi++)

{

for(j=0j<nj++)

{

scanf("%d",&map[i][j])

hash[i][j]=false//初始化设置为都没有走过

step[i][j]=1//初始化

}

}

for(i=0i<mi++)

{

for(j=0j<nj++)

{

ans=max(ans,bfs(i,j))//枚举---以所有的点为起点,并搜索寻找最优解

}

}

printf("%d\n",ans)

}

return 0

}