第1个回答 2013-05-27
#include<stdio.h>
#include<string.h>
#include <conio.h>
struct stack
{
int v;
int i;
int j;
}s[1024];
void getmaze(int,int);
int takelmaze(int,int);
void push(int,int,int);
void output(int,int);
int maze[1024][1024];
bool mark[1024][1024];
int top;
int main()
{
int n,m;
printf("请输入迷宫的大小?(n,m)\n");
scanf("%d%d",&n,&m);
getmaze(n,m);
if(takelmaze(n,m))
output(n,m);
printf("输入回车离开程序。");
fflush(stdin);
while(getchar()!='\n');
return 0;
}
int takelmaze(int n,int m)
{
int v;
int g,h;
int move[9][2]={{0,0},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
v=1;
g=1;
h=1;
top=0;
memset(mark,0,sizeof(mark));
mark[1][1]=1;
do{
g=move[v][0]+g;
h=move[v][1]+h;
if(g==n&&h==m&&maze[n][m]==0)
return 1;
if((maze[g][h]==0)&&(mark[g][h]==0))
{
mark[g][h]=1;
push(g,h,v);
v=1;
}
else if(v<8)
{
g=-move[v][0]+g;
h=-move[v][1]+h;
v++;
}
else
{
if(top>0)
{
g=s[--top].i;
h=s[--top].j;
v=s[--top].v;
v++;
}
}
}while((top>=0)&&(v!=8));
printf("此迷宫无解\n");
return 0;
}
void getmaze(int n,int m)
{
int a,b;
for(a=0;a<=n+1;a++)
{
maze[a][0]=1;
maze[a][m+1]=1;
}
for(b=0;b<=m+1;b++)
{
maze[0][b]=1;
maze[n+1][b]=1;
}
for(a=1;a<=n;a++)
{
for(b=1;b<=m;b++)
scanf("%d",&maze[a][b]);
}
return;
}
void push(int i,int j,int v)
{
s[top].i=i;
s[top].j=j;
s[top].v=v;
top++;
return;
}
void output(int n,int m)
{
int i=0;
printf("(1,1)->");
while(i<top)
printf("(%d,%d)-〉",s[i].i,s[i++].j);
printf("(%d,%d)",n,m);
return;
}