问题遇到的现象和发生背景
findway函数返回不了0
问题相关代码,请勿粘贴截图
#include<bits/stdc++.h>
#define ms 100
using namespace std;
typedef struct Pn
{int i,j;//位置
int next;//方向 0,1,2,3四个方位
}Pn;
int findway(int x1,int y1,int x2,int y2,int migong[ms][ms])
{int x,y,next,find;
stack<Pn> S;//放着p类型的S
Pn start;
start.i=x1;start.j=y1;start.next=-1;
S.push(start);
migong[x1][y1]=2;//走过的路径标记为2
while(!S.empty())
{x=S.top().i;
y=S.top().j;
next=S.top().next;
if(x==x2&&y==y2)//到达了终点
{stack<Pn> zheng;
cout<<"迷宫路径如下:"<<endl;
while(!S.empty())
{zheng.push(S.top());
S.pop();}//栈倒到另一个里面,方便正着输出
while(!zheng.empty())
{cout<<"("<<zheng.top().i<<","<<zheng.top().j<<")"<<" ";
zheng.pop();}
return 1;}
find=0;//没找到
while(next<4&&find==0)
{next++;//试试四个方位哪个可以走通
switch(next)
{case 0:
x=S.top().i-1;
y=S.top().j;
break;//向上
case 1:
x=S.top().i;
y=S.top().j+1;
break;//向右
case 2:
x=S.top().i+1;
y=S.top().j;
break;//向下
case 3:
x=S.top().i;
y=S.top().j-1;
break;}//向左
if(migong[x][y]==0)//0可走,1是墙不可
find=1;
}
if(find==1)
{S.top().next=next;
Pn temp;
temp.i=x;
temp.j=y;
temp.next=-1;
S.push(temp);
migong[x][y]=2;//走过的变成2
}
else
{migong[S.top().i][S.top().j]=0; //走不通还原为0
S.pop();}//找过了四个都走不通,就退栈找上一个
}
return 0;
}
void create(int migong[ms][ms])
{int n,m,i,j;
cout<<"请输入迷宫的规格";
cin>>m>>n;
cout<<"请输入你的迷宫,1为不可走,0为可走";
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>migong[i][j];
}
int main()
{int migong[ms][ms];
create(migong);
cout<<"请输入你的起点";
int x1,y1,x2,y2;
while(cin>>x1>>y1)
{if(migong[x1][y1]==1)
cout<<"起点处为墙,请再次输入";
else
break;}
cout<<"请输入你的终点";
while(cin>>x2>>y2)
{if(migong[x2][y2]==1)
cout<<"终点处为墙,请再次输入";
else
break;}
int flag=findway(x1,y1,x2,y2,migong);
if(flag==0)
cout<<"无路径";
return 0;
}
运行结果及报错内容
检测不出没有路径的情况
我想要达到的结果
请各位帮我看一下哪里出错了