题目是这样的:
现在我不考虑打印路径只计算有多少种路径,为什么总是和答案不太一样?
我的代码是这样的:
#include<stdio.h>
#include<string.h>
char map[5][3]; //一般用二维数组处理迷宫的样子
int d[4][2] = {{-1,0},{0,-1},{1,0},{0,1}}; //这个二维数组用于处理,左、上、右、下。左上角坐标是(0, 0)
int sum=0;
int sx,sy,tx,ty; //有s的是指起点,有t的是指终点
void dfs(int x,int y);
int main()
{
int i,j,x,y;
//读入迷宫
for(i=0;i<5;i++)
{
for(j=0;j<3;j++)
{
scanf("%c",&map[i][j]);
if(map[i][j]=='@') //找起点(不用另起,只需要在读入迷宫的时候,顺带找)
sx=i,sy=j;
if(map[i][j]=='*')//找终点
tx=i,ty=j;
getchar(); //用来清楚缓存
}
}
dfs(sx,sy) ;
printf("总共有%d走法",sum);
}
void dfs(int x,int y)
{
int nx,ny,i,cnt=0; //nx表示新的x,ny表示新的y。
// int p_x[10],p_y[10]; //处理路径问题 ,路径我都记录下来,打不打印是我的事
for(i=0;i<4;i++) //用循环和数组实现左上右下
{
nx=x+d[i][0];
ny=y+d[i][1];
if(map[nx][ny]=='*') //写递归时可以先想想递归出口是什么
{
sum++;
continue; //和break不一样 ,走下一个方向 ,是最近的那个点再一次左上右下
}
else if(nx>4 || nx<0 || ny <0 || ny>2) //不在地图内
continue;
else if(map[nx][ny]=='.')
{
map[nx][ny] = '#'; //保存现场。这个点在这次更深的dfs中不能再用,把其当作墙来看
//j++;
dfs(nx,ny);
map[nx][ny] = '.'; //恢复现场。回溯之后,这个点可以再次用
// j--;
}
}
}
代码运行结果如下:
答案是只有7种走法,现在我不考虑打印路径只计算有多少种路径,为什么我的是10种走法,哪里的思路和代码不太对?请指出,非常感谢。