迷宫问题 C++代码
- 格式:doc
- 大小:68.00 KB
- 文档页数:8
j=Stack.getTJ();
continue;
}
else
break;
}
else if(pow==3)//向下一位访问
{
i++;
if((i==Stack.getI())&&(j==Stack.getJ()))
{
pow++;
i=Stack.getTI();
j=Stack.getTJ();
for( i=0;i<n;i++)
for( j=0;j<n;j++)
{
cin>>mi;
maze[i][j].num=mi;
cout<<maze[i][j].num<<" ";
if(j==n-1)
cout<<endl;
}
cout<<endl;
cout<<endl;
break;
}
else if(c==2)
{
SQ_Stack Stack;//定义栈
Stack.InitStack();//栈初始化
if(maze[n-2][n-2].num) return; //若出口为0,则跳出
int i=n-2,j=n-2;
int pow,a=0;
do //开始寻找线路
{
if((!maze[i][j].num)&&(maze[i][j].visited==0))//如果是通路且从未被访问
{
Stack.pop(back1,back2);//若四个方向均不通,就弹栈
maze[back1][back2].num=1;//将该点的通路位置为1
i=Stack.getTI();//继续往回的点找通路
j=Stack.getTJ();
pow=0;
break;
}
}
}
if(Stack.StackEmpty())//如果栈为空,则表示无通路。
}
else
{
cout<<"输入错误,请重新输入!";
system("pause");
system("cls");
continue;
}
}
break;
}
else
{
cout<<"输入错误,请重新输入!";
system("pause");
system("cls");
continue;
}
}
}
void seek() //寻找路径
maze[i][j].num=1;
else
maze[i][j].num=(rand()%(2-0));
if(i==1&&j==1)//入口置为0
maze[i][j].num=0;
else if(i==n-2&&j==n-2)//出口置为0
maze[i][j].num=0;
cout<<maze[i][j].num<<" ";
maze[x][y].num=8;
total--;
}
system("pause");
system("cls");
cout<<"线路为:"<<endl;
ofstream outfile("迷宫线路.txt",ios::app);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if((i!=Stack.getTI())||(j!=Stack.getTJ()))//如果该点未入栈,则入栈,访问该点
{
Stack.push(i,j);
maze[i][j].visited=1;//且把访问位置为1
}
if(i==1&&j==1)//如果是出口则跳出全部循环
{
a=1;
break;
}
cout<<"2.手动输入"<<endl;
cout<<"请输入序号:";
cin>>choose;
system("cls");
if(choose==1) //自动输入
{
cout<<"请输入迷宫大小(n*n):";
cin>>n;
for(i=0;i<n;i++) //访问位初始化,赋值为0
for(j=0;j<n;j++)
cout.width(2);
outfile<<setiosflags(ios::left)<<maze[i][j].num<<" ";
}
if(j==n-1)
{
cout<<endl;
outfile<<endl;
}
}
outfile<<endl;
Stack.output();
}
else{
system("pause");
{
cout<<"0.继#34;1.退出游戏。"<<endl;
cin>>i;
if(i!=0&&i!=1)
{
cout<<"输入错误,请重新输入!"<<endl;
continue;
}
else
{
cout<<"游戏结束"<<endl;
break;
}
}
}while(!i);
}
};
int main()
{
ifstream infile("输入迷宫.txt");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
infile>>maze[i][j].num;
cout<<maze[i][j].num<<" ";
if(j==n-1)
cout<<endl;
}
infile.close();
break;
cout<<endl;
cout<<"进入游戏"<<endl;
cout<<endl;
cout<<"**************************************************************"<<endl;
do
{
creat();//建立迷宫
seek();//寻找通路
while(1)
#include<iostream>
#include<iomanip>
#include<fstream>
#include <ctime>
#include "SQ_Stack.h"
using namespace std;
struct Visited
{
int num; //是否是通路(1或0)
int visited; //判断是否已被访问(1或0)
if(j==n-1)
cout<<endl;
}
cout<<endl;
break;
}
else if(choose==2) //手动输入
{
cout<<"请输入迷宫大小(n*n):";
cin>>n;
for(i=0;i<n;i++)//访问位初始化为0
for(j=0;j<n;j++)
maze[i][j].visited=0;
{
if(maze[i][j].num==8)
{
cout<<setw(2)<<setiosflags(ios::left)<<"×"<<" ";
cout.width(2);
outfile<<setiosflags(ios::left)<<"×"<<" ";
}
else
{
cout<<setw(2)<<setiosflags(ios::left)<<maze[i][j].num<<" ";
break;
}while(a==0);
if(!Stack.StackEmpty())
{
int x,y;
int v=Stack.StackLength()-1; //v用来访问栈
int total=Stack.StackLength();
while(total)
{
Stack.visit(x,y,v);
i=i;//初始向左访问
j=j-1;
pow=0;