我的代码:可能丑陋了点,没办法,现在的水平就只有这样了。
/********************************************************
** Highlight software by yzfy(雨中飞燕) http:// *
*********************************************************/
#include<iostream>
#include<ctime>
using namespace std;
const int m=12,p=15; //迷宫的行数和列数
struct offsets //前进方向表的结构定义
{
int a,b; //a,b是x,y(SeekPath函数参数)方向的偏移
char *dir; //dir是方向
};
int Maze[m+2][p+2]; //迷宫定义
int mark[m+2][p+2]; //访问标记数组
//各个方向的偏移表
offsets move[8]={{-1,0,"N"},{-1,1,"NE"},{0,1,"E"},{1,1,"SE"},
{1,0,"S"},{1,-1,"SW"},{0,-1,"W"},{-1,-1,"NW"}};
int main()
{
int SeekPath(int,int);
int i,j;
srand(unsigned(time(NULL)));
for(i=0;i<m+2;i++) //用随机数产生迷宫
{
for(j=0;j<=p+1;j++)
Maze[i][j]=rand()%2;
}
//设定行边界
for(j=0;j<=p+1;j++)
{
Maze[0][j]=Maze[m+1][j]=1;
}
//设定列边界
for(i=0;i<=m+1;i++)
{
Maze[i][0]=Maze[i][p+1]=1;
}
for(i=0;i<m+2;i++) //访问标记数组初始为零
for(j=0;j<p+2;j++)
mark[i][j]=0;
cout<<"The maze is:"<<endl; //输出刚才产生的迷宫
for(i=0;i<m+2;i++)
{
for(j=0;j<p+2;j++)
cout<<Maze[i][j];
cout<<endl;
}
mark[1][1]=1; //从入口[1][1]开始
if(SeekPath(1,1)) //调用求解迷宫的递归算法
cout<<"("<<1<<","<<1<<"(,"<<"Direction"<<"E"<<endl;
system("pause");
return 0;
}
int SeekPath(int x,int y)
{
//从迷宫某一位置开始,寻找通向出口[M][P]的一条路径。
//如果找到,返回1,否刚返回0;
//试探的出发点为[1][1].
int i,g=0,h=0; //用G,H记录位置信息,D记方向
char *d=NULL;
if(x==m&&y==p)
return 1; //到达出口,返回1;
for(i=0;i<8;i++)
{
g=x+move[i].a;
h=y+move[i].b;
d=move[i].dir; //找下一位置和方向(a,b,dir)
if(Maze[g][h]==0 && mark[g][h]==0)
{
mark[g][h]=1;
if(SeekPath(g,h)) //从此位置递归试探
{
cout<<"("<<g<<","<<h<<"),"<<"Direction "<<d<<endl;
return 1; //试探成功,逆向输出路径坐标
}
}
}
if(x==1&&y==1)
cout<<"no path in Maze"<<endl;
return 0;
}
** Highlight software by yzfy(雨中飞燕) http:// *
*********************************************************/
#include<iostream>
#include<ctime>
using namespace std;
const int m=12,p=15; //迷宫的行数和列数
struct offsets //前进方向表的结构定义
{
int a,b; //a,b是x,y(SeekPath函数参数)方向的偏移
char *dir; //dir是方向
};
int Maze[m+2][p+2]; //迷宫定义
int mark[m+2][p+2]; //访问标记数组
//各个方向的偏移表
offsets move[8]={{-1,0,"N"},{-1,1,"NE"},{0,1,"E"},{1,1,"SE"},
{1,0,"S"},{1,-1,"SW"},{0,-1,"W"},{-1,-1,"NW"}};
int main()
{
int SeekPath(int,int);
int i,j;
srand(unsigned(time(NULL)));
for(i=0;i<m+2;i++) //用随机数产生迷宫
{
for(j=0;j<=p+1;j++)
Maze[i][j]=rand()%2;
}
//设定行边界
for(j=0;j<=p+1;j++)
{
Maze[0][j]=Maze[m+1][j]=1;
}
//设定列边界
for(i=0;i<=m+1;i++)
{
Maze[i][0]=Maze[i][p+1]=1;
}
for(i=0;i<m+2;i++) //访问标记数组初始为零
for(j=0;j<p+2;j++)
mark[i][j]=0;
cout<<"The maze is:"<<endl; //输出刚才产生的迷宫
for(i=0;i<m+2;i++)
{
for(j=0;j<p+2;j++)
cout<<Maze[i][j];
cout<<endl;
}
mark[1][1]=1; //从入口[1][1]开始
if(SeekPath(1,1)) //调用求解迷宫的递归算法
cout<<"("<<1<<","<<1<<"(,"<<"Direction"<<"E"<<endl;
system("pause");
return 0;
}
int SeekPath(int x,int y)
{
//从迷宫某一位置开始,寻找通向出口[M][P]的一条路径。
//如果找到,返回1,否刚返回0;
//试探的出发点为[1][1].
int i,g=0,h=0; //用G,H记录位置信息,D记方向
char *d=NULL;
if(x==m&&y==p)
return 1; //到达出口,返回1;
for(i=0;i<8;i++)
{
g=x+move[i].a;
h=y+move[i].b;
d=move[i].dir; //找下一位置和方向(a,b,dir)
if(Maze[g][h]==0 && mark[g][h]==0)
{
mark[g][h]=1;
if(SeekPath(g,h)) //从此位置递归试探
{
cout<<"("<<g<<","<<h<<"),"<<"Direction "<<d<<endl;
return 1; //试探成功,逆向输出路径坐标
}
}
}
if(x==1&&y==1)
cout<<"no path in Maze"<<endl;
return 0;
}
i like linux...