迷宫求解代码
#include<stdio.h>
#include<windows.h>
#define MAXSIZE 12
struct Location{
int x;
int y;
};
struct Location begin;
struct Location end;
struct Location next;
struct Location dom[4]={{0,1},{1,0},{0,-1},{-1,0}};
typedef int Maze[MAXSIZE][MAXSIZE];
Maze m;
int row,col;
void Print(int row,int col)
{
int i,j;
for(i=0;i<=row+1;i++)
{
for(j=0;j<=col+1;j++)
printf("%3d",m[i][j]);
printf("\n");
}
printf("\n");
}
void Seek(struct Location now,int nowstep)
{
int i;
for(i=0;i<=3;i++) {
next.x=now.x+dom[i].x;
next.y=now.y+dom[i].y;
if(m[next.x][next.y] == -1){
m[next.x][next.y]=++nowstep;
if(next.x != end.x || next.y != end.y)
Seek(next,nowstep);
else
Print(row,col);
m[next.x][next.y]=-1;
nowstep--;
}
}
}
int main()
{
int i,j,num,x1,y1;
printf("注:行数和列数不包含外墙\n ");
printf("请输入迷宫的行数和列数(不超过10): \n");
scanf("%d %d" ,&row,&col);
for(i=0;i<=col+1;i++)
{
m[0][i]=0;
m[row+1][i]=0;
}
for(j=1;j<=row;j++)
{
m[j][0]=0;
m[j][col+1]=0;
}
for(i=1;i<=row;i++)
{
for(j=1;j<=col;j++)
m[i][j]=-1;
}
printf("请输入迷宫内墙的个数: \n");
scanf("%d", &num);
if(num)
printf("请输入迷宫内每个墙所在的位置(行和列): \n");
for(i=1;i<=num;i++)
{
scanf("%d %d" ,&x1,&y1);
m[x1][y1]=0;
}
printf("生成迷宫:\n");
Print(row,col);
printf("请输入起点的位置(行和列):\n ");
scanf("%d%d",&begin.x,&begin.y);
printf("请输入终点的位置(行和列): \n");
scanf("%d%d",&end.x,&end.y);
m[begin.x][begin.y]=1;
Seek(begin,1);
system("pause");
return 0;
}