#include<stdio.h>
int maze[8][8]= {{0,0,0,0,0,0,0,0},{0,1,1,1,1,0,1,0},{0,0,0,0,1,0,1,0},{0,1,0,0,0,0,1,0},{0,1,0,1,1,0,1,0},{0,1,0,0,0,0,1,1},{0,1,0,0,1,0,0,0},{0,1,1,1,1,1,1,0}},fx[4]= {1,-1,0,0},fy[4]= {0,0,-1,1};
int i,j,k,total;
void search(int i,int j);
void Out();
int check(int i,int j,int k);
int main()
{ int total=0;
maze[1][1]=3;
search(1,1);
return 0;
}
void search(int i,int j)
{ int k,newi,newj;
for(k=1; k<=4; k++)
if(check(i,j,k)==1)
{ newi=i+fx[k];
newj=j+fy[k];
maze[newi][newj]=3;
if(newi==8&&newj==8)
Out();
else
search(newi,newj);
}
maze[i][j]=2;
}
void Out()
{ int i,j;
for(i=1; i<=8; i++)
{ printf("\n");
for(j=1; j<=8; j++)
if(maze[i][j]==3)
{ printf("V");
total++;
}
else
printf("*");
}
printf("Total is %d\n",total);
}
int check(int i,int j,int k)
{ int flag=1;
i=i+fx[k];
j=j+fy[k];
if(i<1||i>8||j<1||j>8)
flag=0;
else if(maze[i][j]!=0)
flag=0;
return flag;
}
for(k=1; k<=4; k++)
if(check(i,j,k)==1)
{ newi=i+fx[k];
==这肯定不行啊,fx就有四个数据,如果k=4的话,fx[k]就越界了,改成for(k=0;k<4;k++)。
for(j=1; j<=8; j++)
if(maze[i][j]==3)也存在同类问题
你要记住一个事:数组下标是从0开始的。如果数组长度是8,下标就是0到7,下标为8就越界了。
你的代码全是这个错误
这个很简单,完全可以自己查找原因,你的输出在Out()函数里面,没有输出说明没有走到那里,所以一步步反着推理就可以了!望采纳!
你那个for 有问题,你数组只有4组 。你fx[4]不久越界了嘛。 直接就崩了
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632