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

2019-03-09 15:05

软件综合实习

bool Mazepath(string **maze,int m,int n) //寻找迷宫maze中从(1,1)到(m,n)的路径,如果到则返回true,

否则返回false {

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;

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

软件综合实习

}

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]==\判断新位置是否可达

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

软件综合实习

{

Temp1.x=x; //把可行路径的行x、列y坐标赋给Temp

Temp1.y=y;

maze[x][y]=\标志新位置已到达过

q.Push(Temp1); //新位置入栈【临时栈q】

}

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

{

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) //如果没有新位置入栈,则返回到上一个位置

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

软件综合实习

{

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的顶点元素,即第一个位置

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

软件综合实习

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; //示

}

else if(b==1) {

temp->data.dir=2; //示 }

else if(a==-1) {

temp->data.dir=3; //示

}

信息科学与工程学院 - 39- 获取下一个位行坐标方向 列坐标方向 方向向下,用1表

方向向右,用2表

方向向上,用3表

网络工程11-1班


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

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

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

马上注册会员

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