#include
using namespace std;
#define MAXSIZE 200
#define m 999
#define n 999
typedef struct
{
int i,j,di;
}Queue;
Queue Stack[MAXSIZE],Path[MAXSIZE];//栈和存放最短路
径长度的数组
int top=-1,count=1,minlen=MAXSIZE;//栈顶指针,路径
计数器,最短路径长度
const int move[4][2]={
{-1,0},{0,1},{1,0},{0,-1}};
int mark[m][n];
//标志数组
int maze[m][n];
//迷宫数组
int i1=1,j1=1,i2=10,j2=10,m1=11,n1=11;
//入口,出
口坐标,迷宫大小
void Init_maze();
//初始化系统自带迷宫
void NewCreat();
//新建迷宫
void Put_in();
//输入进出口
void PutOut_all();
//找所有路径和最短路径并输出
所有路径
void PutOut_Grap();
//输出迷宫图形
void Migong();
//使用迷宫
void main()
{
cout<<"*******************欢迎使用迷宫系统
*******************\n";
while(1)
{
int i;
cout<<"请选择你要的操作:\n"
<<"1.使用系统自带迷宫\n"
<<"2.使用新建迷宫\n"
<<"0.退出\n";
cout<<"请输入:";
cin>>i;
switch(i)
{
case 1: Init_maze();Migong();break;
case 2: NewCreat();Migong();break;
case 0: return;
default :cout<<"*****输入错误,请重新输入!
*****\n";break;
}
}
}
//主函数
void Init_maze()
{
int i;
for(i=0;i<=m1;i++)
for(int j=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;
}
//构建系统迷宫
void Migong()
{
cout<<"************欢迎使用迷宫************\n";
while(1)
{
int i;
cout<<"请选择你要的操作:\n"
<<"
1.输出所有路径及最短路径\n"
<<"
0.返回上一级菜单\n";
cout<<"请输入:";
cin>>i;
cout<<"---------------------------\n";
switch(i)
{
case 1:
{
}
Put_in();
PutOut_all();
break;
case 0: return;
default :cout<<"*****输入错误,请重新输入!
*****\n";break;
}
}
}
//系统自带迷宫操作函数
void PutOut_Grap()
{
int i;
cout<<"迷宫图形:"<
for(int j=1;j>p>>q;
i1=p;j1=q;
cout<<"请选择你的出口(i2,j2):";
cin>>p>>q;
i2=p;j2=q;
//输入迷宫的进出口
void PutOut_all()
{
int i,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<<"路径"<
cout<<"->("<