本文共 1315 字,大约阅读时间需要 4 分钟。
这道题花了我好久好久的时间,就是找不出bug,后来是问了一个朋友,然后两个人看了好一会,才发现,问题是在于,全局变量i和局部变量i 的区别!!! 起初我的I设置成为了全局变量,所以当他结果一次循环之后,就不变了,变成了4,之后再也没有变化, 所以之后的代码怎么都运行不了,实际上需要i变成一个局部变量,所以才能起到循环的作用。
#include#include #include #include #include #include using namespace std;//int J[20][20];int Stepx[4]={ 0,-1,0,1};int Stepy[4]={ -1,0,1,0};int m,n;int starx,stary;int endx,endy;//创建一个结构体数组来存当前的位置struct M{ int numx,numy;}Pla[4400];void DFS(int x,int y,int num){ //这个dfs就是创建一个步数,然后对于这个步数,进行输出 Pla[num].numx=x; Pla[num].numy=y; //printf("???"); // printf("(%d,%d)->",Pla[1].numx,Pla[1].numy); if(x==endx&&y==endy){ //那就输出 for(int i=1;i ",Pla[i].numx,Pla[i].numy); printf("(%d,%d)\n",Pla[num].numx,Pla[num].numy); } else{ for(int i=0;i<4;++i){ int newx=x+Stepx[i]; int newy=y+Stepy[i]; //来一个判断条件,不越界,并且这个地方可以去 if((newx>=1)&&(newx<=m)&&(newy>=1)&&(newy<=n)&&(J[newx][newy]==1)){ //没过界,并且可以走,这里有个很重要的点 J[newx][newy]=0;//以免回头走 // printf("%d %d\n",newx,newy); DFS(newx,newy,num+1); J[newx][newy]=1;//恢复原样 } } }}int main(){ scanf("%d%d",&m,&n); //初始化 memset(J,0,sizeof(J)); memset(J,0,sizeof(J)); memset(Pla,0,sizeof(Pla)); for(int i=1;i<=m;++i) for(int j=1;j<=n;++j) scanf("%d",&J[i][j]); //输入起始点和终点 scanf("%d%d",&starx,&stary); scanf("%d%d",&endx,&endy); J[starx][stary]=0; DFS(starx,stary,1);}
转载地址:http://gufen.baihongyu.com/