关于迷宫最短路径与所有路径的问题.docx

上传人:b****2 文档编号:8965 上传时间:2022-09-30 格式:DOCX 页数:9 大小:22.91KB
下载 相关 举报
关于迷宫最短路径与所有路径的问题.docx_第1页
第1页 / 共9页
关于迷宫最短路径与所有路径的问题.docx_第2页
第2页 / 共9页
关于迷宫最短路径与所有路径的问题.docx_第3页
第3页 / 共9页
关于迷宫最短路径与所有路径的问题.docx_第4页
第4页 / 共9页
关于迷宫最短路径与所有路径的问题.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

关于迷宫最短路径与所有路径的问题.docx

《关于迷宫最短路径与所有路径的问题.docx》由会员分享,可在线阅读,更多相关《关于迷宫最短路径与所有路径的问题.docx(9页珍藏版)》请在冰豆网上搜索。

关于迷宫最短路径与所有路径的问题.docx

关于迷宫最短路径与所有路径的问题

最短路径及其他路径

#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<<"迷宫构建成功!

"<

}

//自定义构建迷宫

结果如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1