c++stack算法求问

qq_40532477 2018-07-10 06:24:15
#include "StdAfx.h"
#include <iostream>
#include <stack>
using namespace std;
#define MaxSize 100
#define M 10
#define N 10

int MAZE[M][N]=
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
struct pos
{
int i,j;
};

struct pos Move(struct pos curr)
{
/*判断是否有通路,有则返回通路位置,无则返回原来位置
重复问题:
若何判断原来方向
若何记录哪个位置是第几次走*/
struct pos next=curr;
int x=curr.i,y=curr.j;
//向上
if(!MAZE[x-1][y]&&(x-1)>=0 && MAZE[x-1][y]!=2)
{
next.i=x-1;//只有x坐标改变
MAZE[x-1][y]=2;//标记将要行走
return next;//返回要下一步的位置
}//向右
else if(!MAZE[x][y+1]&&(y+1)<N && MAZE[x][y+1]!=2)
{
next.j=y+1;
MAZE[x][y+1]=2;
return next;
}//向下
else if(!MAZE[x+1][y]&&(x+1)<M && MAZE[x+1][y]!=2)
{
next.i=x+1;
MAZE[x+1][y]=2;
return next;
}//向左
else if(!MAZE[x][y-1]&&y-1>=0 && MAZE[x][y-1]!=2)
{
next.j=y-1;
MAZE[x][y-1]=2;
return next;
}
return curr;//无路,返回原来的位置
}
void findPath()
{
stack<struct pos> Path;
struct pos curr,nex;
curr.i=0;curr.j=0;
Path.push(curr);//入口入栈
MAZE[0][0]=2;//标记已走过
while(!Path.empty()){//5)
curr=Path.top();//1)
// cout<<curr.i<<" "<<curr.j<<endl;
nex=curr;
nex=Move(curr);//2)特别注意重复的问题和边界处理问题
if(!(curr.i==nex.i&&curr.j==nex.j))//3)发现通路
Path.push(nex);
else
Path.pop();//4)未发现通路
if(nex.i==M-1&&nex.j==N-1){//5)
struct pos *route=new struct pos[Path.size()];
int z=0;
while(!Path.empty()){
curr=Path.top();
route[z++]=curr;
Path.pop();
}
for(int k=z-1;k>=0;k--){
cout<<"("<<route[k].i<<","<<route[k].j<<")";
if(k%5==0) cout<<endl;
if(k) cout<<"->";
}
return ;
}
}
cout<<"NO Path!"<<endl;
}
int main()
{
findPath();
system("pause");
return 0;
}



迷宫应该是有解的 但是运行之后结果是无解 求问大神是不是算法哪里有错误 应该怎么改
...全文
87 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-07-11
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧