Data_Structure_ 2021-12-20 10:03 采纳率: 54.5%
浏览 37
已结题

c++迷宫问题,检测不出没有路径的情况

问题遇到的现象和发生背景

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; 
}

运行结果及报错内容

检测不出没有路径的情况

我想要达到的结果

请各位帮我看一下哪里出错了

  • 写回答

1条回答 默认 最新

  • 藏猊 2021-12-20 11:17
    关注

    img

    退回去找上一个,但上一个一定能找回到这里,所以进入无限循环

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月20日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来