桂林理工大学-软件综合实习[迷宫问题]何天从(3)

2019-03-09 15:05

软件综合实习

{ Stack q,p; //定义栈p、q,分别存探索迷宫的过程和存储路径 T Temp1,Temp2; int x,y,loop;

printf(\【请输入】入口行坐标,列坐标:\ cin>>a1>>b1;

while(a1>m||b1>n) {

printf(\【输入坐标有误】\

printf(\【请重新输入】入口行坐标,列坐标:\ cin>>a1>>b1; }

printf(\

printf(\【请输入】出口行坐标,列坐标:\ cin>>c1>>d1;

while(c1>m||d1>n) {

printf(\【输入坐标有误】\

printf(\【请重新输入】出口行坐标,列坐标:\ cin>>c1>>d1; }

printf(\ Temp1.x=a1; Temp1.y=b1;

q.Push(Temp1); //将入口位置入栈 p.Push(Temp1);

maze[a1][b1]=\//标志入口位置已到达过 while(!q.empty()) //栈q非空,则反复探索 { Temp2=q.GetPop(); //获取栈顶元素

if(!(p.GetPop().x==q.GetPop().x&&p.GetPop().y==q.GetPop().y)) { p.Push(Temp2);

//如果有新位置入栈,则把上一个探索的位置存入栈p }

for(loop=0;loop<4;loop++) //探索当前位置的4个相邻位置 { x=Temp2.x+move[loop][0];

//计算出新位置行x位置值(move分别=0、1、0、-1)

y=Temp2.y+move[loop][1];

//计算出新位置列y位置值(move分别=1、0、-1、0)

if(maze[x][y]==\//判断新位置是否可达 { Temp1.x=x; //把可行路径的行x、列y坐标赋给Temp Temp1.y=y;

maze[x][y]=\//标志新位置已到达过 q.Push(Temp1); //新位置入栈【临时栈q】 }

if((x==c1)&&(y==d1)) //成功到达出口

信息科学与工程学院 - 10- 网络工程11-1班

软件综合实习

{ Temp1.x=c1; //把出口的行x、列y坐标赋给Temp Temp1.y=d1; Temp1.dir=0;

p.Push(Temp1); //把最后一个位置入栈p PrintPath(p,m,n,maze); //输出路径 Restore(maze,m,n); //恢复路径

return 1; //表示成功找到路径 } }

if(p.GetPop().x==q.GetPop().x&&p.GetPop().y==q.GetPop().y)

//如果没有新位置入栈,则返回到上一个位置

{

p.Pop(); q.Pop(); } }

return 0; //表示查找失败,即迷宫无路经 }

//╞╪╪╪╪╪╪╪╪╪【输出路径函数】╪╪╪╪╪╪╪╪╪╪╪╪╪╪╪╡ void PrintPath(Stack p,int m,int n,string **maze)

{ Stack t; //定义一个栈,按从入口到出口存储路径 int a,b; T data;

LinkNode *temp;

temp=new LinkNode; //申请空间

temp->data=p.Pop(); //取栈p的顶点元素,即第一个位置 t.Push(temp->data); //第一个位置入栈t delete temp; //释放空间

while(!p.empty()) //栈p非空,则反复回首转移 {

temp=new LinkNode;

temp->data=p.Pop(); //获取下一个位置,得到行走方向 a=t.GetPop().x-temp->data.x; //行坐标方向 b=t.GetPop().y-temp->data.y; //列坐标方向 if(a==1)

{ temp->data.dir=1; //方向向下,用1表示 }

else if(b==1)

{ temp->data.dir=2; //方向向右,用2表示 }

else if(a==-1)

{ temp->data.dir=3; //方向向上,用3表示 }

else if(b==-1)

信息科学与工程学院 - 11- 网络工程11-1班

软件综合实习

{ temp->data.dir=4; //方向向左,用4表示 }

t.Push(temp->data); //把新位置入栈 delete temp; }

/* *****************************************************************

以下15行代码的作用是,把t赋给x和y。 x的作用是:赋给z(下面定义),提出输出迷宫的路径信息的栈。 y的作用是:定义迷宫通路的指向,提出输出迷宫二维图的栈。

********************************************************************* */ Stack x,y; LinkNode *w,*k;

w=new LinkNode; //申请空间 k=new LinkNode; //申请空间 while(!t.empty())

{ w->data=t.Pop(); //取栈p的顶点元素,即第一个位置 k->data=w->data;

x.Push(w->data); //第一个位置入栈t y.Push(k->data); delete w; delete k;

w=new LinkNode; //重新申请空间 k=new LinkNode; //重新申请空间 }

//╞╪╪╪╪╪╪╪【给可达的通路赋与行走方向】╪╪╪╪╪╪╪╪╪╪╪╪╡ while(!y.empty()) { data=y.Pop();

if(data.dir==1) maze[data.x][data.y]=\↓\ else if(data.dir==2)

maze[data.x][data.y]=\→\ else if(data.dir==3)

maze[data.x][data.y]=\↑\ else if(data.dir==4)

maze[data.x][data.y]=\←\ }

Stack z; //把x反向赋给z。(从z的栈顶是入口坐标) LinkNode *u;

u=new LinkNode; //申请空间 while(!x.empty())

{ u->data=x.Pop(); //取栈p的顶点元素,即第一个位置 z.Push(u->data); //第一个位置入栈t delete u;

u=new LinkNode; //重新申请空间

信息科学与工程学院 - 12- 网络工程11-1班

软件综合实习

} cout<<\《恭喜》!迷宫路径探索成功!\\n\\n\

printf(\┣━━━━━━━━━【迷宫路径输出】━━━━━━━━━┫ \\n\

printf(\┃ ┃ \\n\

printf(\┃ ⑴〖输出迷宫的二维图〗 ┃ \\n\

printf(\┃ ⑵〖输出迷宫的路径〗 ┃ \\n\

printf(\┃ ⑶〖重新输入迷宫路径〗 ┃ \\n\

printf(\┃ ⑷〖退空屏幕〗 ┃ \\n\

printf(\┃ ⑸〖结束探索〗 ┃ \\n\

printf(\┃ ┃ \\n\

printf(\┣━━━━━━━━━━━━━━━━━━━━━━━━━━┫ \\n\

printf(\ while(1) { int j;

printf(\【请选择】操作:\ scanf(\ printf(\ switch(j) {

case 1:

{ int i=0,j=0,count=0;

cout<<\【输出】迷宫的方阵为: \\n\ cout<<\

for(int c=0;c

cout<

cout<

cout<

for(i=0;i

for(j=0;j

if(maze[i][j]==\

信息科学与工程学院 - 13- 网络工程11-1班

软件综合实习

maze[i][j]=48; maze[a1][b1]=\入\ maze[c1][d1]=\出\

if(maze[i][j]==\ cout<<\

cout<

if(count%(n+2)==0) { r++;

cout<

cout<

cout<<\【■:围墙,入:入口,→:向右走,↓:向下走,←:向左走,↑:向上走 】\\n\\n\ break; } case 2:

{ cout<<\【输出】迷宫的路径为:\\n\\n\ while(!z.empty())

//栈非空,循环输出路径,包括行坐标、列坐标、下一个位置方向

{

data=z.Pop();

cout<<\

//输出行x坐标,列y坐标

switch(data.dir) //用循环输出相应的方向 { case 1:

cout<<\↓)\\n\ break; case 2:

cout<<\→)\\n\ break; case 3:

cout<<\↑)\\n\ break; case 4:

cout<<\←)\\n\ break; case 0:

cout<<\ break; }

信息科学与工程学院 - 14- 网络工程11-1班


桂林理工大学-软件综合实习[迷宫问题]何天从(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年一建法规冲刺最新版资料2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: