这道题花了我好久好久的时间,就是找不出bug,后来是问了一个朋友,然后两个人看了好一会,才发现,问题是在于,全局变量i和局部变量i 的区别!!!
起初我的I设置成为了全局变量,所以当他结果一次循环之后,就不变了,变成了4,之后再也没有变化,
所以之后的代码怎么都运行不了,实际上需要i变成一个局部变量,所以才能起到循环的作用。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<queue>
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<num;++i)
printf("(%d,%d)->",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);
}