关于迷宫最短路径与所有路径的问题.docx
- 文档编号:8965
- 上传时间:2022-09-30
- 格式:DOCX
- 页数:9
- 大小:22.91KB
关于迷宫最短路径与所有路径的问题.docx
《关于迷宫最短路径与所有路径的问题.docx》由会员分享,可在线阅读,更多相关《关于迷宫最短路径与所有路径的问题.docx(9页珍藏版)》请在冰豆网上搜索。
关于迷宫最短路径与所有路径的问题
最短路径及其他路径
#include
usingnamespacestd;
#defineMAXSIZE200
#definem999
#definen999
typedefstruct
{
inti,j,di;
}Queue;
QueueStack[MAXSIZE],Path[MAXSIZE];//栈和存放最短路径长度的数组
inttop=-1,count=1,minlen=MAXSIZE;//栈顶指针,路径计数器,最短路径长度
constintmove[4][2]={
{-1,0},{0,1},{1,0},{0,-1}};
intmark[m][n];//标志数组
intmaze[m][n];//迷宫数组
inti1=1,j1=1,i2=10,j2=10,m1=11,n1=11;//入口,出口坐标,迷宫大小
voidInit_maze();//初始化系统自带迷宫
voidNewCreat();//新建迷宫
voidPut_in();//输入进出口
voidPutOut_all();//找所有路径和最短路径并输出所有路径
voidPutOut_Grap();//输出迷宫图形
voidMigong();//使用迷宫
voidmain()
{
cout<<"*******************欢迎使用迷宫系统*******************\n";
while
(1)
{
inti;
cout<<"请选择你要的操作:
\n"
<<"1.使用系统自带迷宫\n"
<<"2.使用新建迷宫\n"
<<"0.退出\n";
cout<<"请输入:
";
cin>>i;
switch(i)
{
case1:
Init_maze();Migong();break;
case2:
NewCreat();Migong();break;
case0:
return;
default:
cout<<"*****输入错误,请重新输入!
*****\n";break;
}
}
}
//主函数
voidInit_maze()
{
inti;
for(i=0;i<=m1;i++)
for(intj=0;j<=n1;j++)
{
maze[i][j]=1;
mark[i][j]=0;
}
for(i=1;i<=6;i++)maze[1][i]=0;
maze[1][8]=maze[2][1]=maze[2][3]=0;
for(i=6;i<=10;i++)maze[2][i]=0;
maze[3][1]=maze[3][3]=maze[3][6]=maze[3][10]=0;
maze[4][1]=maze[4][9]=maze[4][10]=maze[5][1]=0;
for(i=3;i<=7;i++)maze[4][i]=0;
for(i=1;i<=3;i++)maze[6][i]=0;
for(i=7;i<=10;i++)maze[6][i]=0;
maze[6][5]=maze[7][1]=maze[7][5]=maze[7][6]=0;
maze[7][7]=maze[9][3]=maze[9][8]=maze[9][10]=0;
for(i=1;i<=5;i++)maze[8][i]=0;
for(i=8;i<=10;i++)maze[8][i]=0;
maze[10][8]=maze[6][4]=maze[8][7]=maze[10][10]=0;
}
//构建系统迷宫
voidMigong()
{
cout<<"************欢迎使用迷宫************\n";
while
(1)
{
inti;
cout<<"请选择你要的操作:
\n"
<<"1.输出所有路径及最短路径\n"
<<"0.返回上一级菜单\n";
cout<<"请输入:
";
cin>>i;
cout<<"---------------------------\n";
switch(i)
{
case1:
{
Put_in();
PutOut_all();
break;
}
case0:
return;
default:
cout<<"*****输入错误,请重新输入!
*****\n";break;
}
}
}
//系统自带迷宫操作函数
voidPutOut_Grap()
{
inti;
cout<<"迷宫图形:
"< for(i=1;i<2*m1;i++) cout<<"_"; cout< for(i=1;i { for(intj=1;j cout<<""< cout< } for(i=1;i<2*m1;i++) cout<<"-"; cout< cout<<"共"< } //输出迷宫的图形 voidPut_in() { intp,q; PutOut_Grap(); cout<<"请选择你的入口(i1,j1): "; cin>>p>>q; i1=p;j1=q; cout<<"请选择你的出口(i2,j2): "; cin>>p>>q; i2=p;j2=q; } //输入迷宫的进出口 voidPutOut_all() { inti,j,di,find,k; top++; Stack[top].i=i1; Stack[top].j=j1; Stack[top].di=-1; mark[i1][j1]=1; while(top>-1)//寻找路径 { i=Stack[top].i; j=Stack[top].j; di=Stack[top].di; if(i==i2&&j==j2)//找到一条路径则输出 { cout<<"***********************************\n"; cout<<"路径"< \n"; cout<<"("< for(k=1;k<=top;k++) { cout<<"->("< if((k+1)%5==0)cout< } cout< if(top+1 { for(k=0;k<=top;k++) Path[k]=Stack[k]; minlen=top+1; } mark[Stack[top].i][Stack[top].j]=0; top--; i=Stack[top].i; j=Stack[top].j; di=Stack[top].di; } find=0; while(di<4&&find==0)//确定将要移动的方向及路程 { di++; i=Stack[top].i+move[di][0]; j=Stack[top].j+move[di][1]; if(mark[i][j]==0&&maze[i][j]==0) find=1; } if(find==1)//若有路可走则进栈 { Stack[top].di=di; top++; Stack[top].i=i; Stack[top].j=j; Stack[top].di=-1; mark[i][j]=1; } else { mark[Stack[top].i][Stack[top].j]=0; top--; } } cout<<"***********************************\n"; cout<<"最短路径如下: \n"<<"长度: "< cout<<"路径: \n("< for(k=1;k { cout<<"->("< if((k+1)%5==0)cout< } cout< count=1; cout<<"***********************************\n"; } //输出所有路径 voidNewCreat() { inth,l,i; cout<<"---------------------------\n"; cout<<"请输入你的迷宫的行数,列数: "; cin>>h>>l; m1=h+1;n1=l+1; for(i=0;i<=m1;i++) for(intj=0;j<=n1;j++) { maze[i][j]=1; mark[i][j]=0; } cout<<"请以行为主序输入你的迷宫图形: \n"; for(i=1;i<=h;i++) { for(intj=1;j<=l;j++) cin>>maze[i][j]; }cout< cout<<"迷宫构建成功! "< } //自定义构建迷宫 结果如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 迷宫 路径 所有 问题