专业运动员赛后总结:你知道迷宫吗???你能走出我的迷宫吗???

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 21:08:51
#include<stdio.h>
#define r 64
#define m2 8
#define n2 10
int m=m2-2,n=n2-2;

typedef struct
{ int x,y; //行,列坐标
int pre; //链域
}sqtype;
sqtype sq[r];

struct moved
{ int x,y; //坐标增量,取值-1,0,1
}move[8];

void INPUT(int maze[m2][n2]); //输入
void POUT(int maze[m2][n2]); //输出
int SHORTPATH(int maze[m2][n2]); //查找迷宫maze的最短路径
void PRINTPATH(sqtype sq[],int rear);
void RESTORE(int maze[m2][n2]);

int main()
{
int maze[m2][n2];
INPUT(maze);
SHORTPATH(maze);
return 1;
}

void INPUT(int maze[m2][n2])
{
for(int i=0;i<m2;i++)
for(int j=0;j<n2;j++)
if(i==0&&j==0) maze[i][j]=0;
else if(i==m2-1&&j==n2-1) maze[i][j]=0;
else if(i==0||i==m2-1) maze[i][j]=1;
else if(j==0||j==n2-1) maze[i][j]=1;
else scanf("%d",&maze[i][j]);
}

void POUT(int maze[m2][n2])
{
for(int i=0;i<m2;i++)
{ for(int j=0;j<n2;j++)
printf("%d ",maze[i][j]);
printf("\n");
}
}

int SHORTPATH(int maze[m2][n2])
{ int i,j,v,front,rear,x,y;
sq[1].x=1; sq[1].y=1; sq[1].pre=0;
front=1; rear=1;
maze[1][1]=-1; //标记入口点已到达过
while(front<=rear) //队列非空
{ x=sq[front].x; y=sq[front].y; //(x,y)为出发点
for(v=0;v<8;v++) //搜索(x,y)的8个相邻点(i,j)是否可到达
{ i=x+move[v].x;
j=y+move[v].y;
if(maze[i][j]==0) //(i,j)为可以到达的点,将其入队列
{ rear++;
sq[rear].x=i; sq[rear].y=j;
sq[rear].pre=front;
maze[i][j]=-1; //标记(i,j)点已到达过
}
if((i==m)&&(j==n)) //到达出口
{ PRINTPATH(sq,rear); //打印路径
RESTORE(maze); //恢复迷宫
return 1;
}
}
front++; //出队,front指向新的出发点
}
return 0; //迷宫无路径,返回0
}

void PRINTPATH(sqtype sq[],int rear)
{
int i;
i=rear;
do
{
printf("\n(%d,%d)",sq[i].x,sq[i].y);
i=sq[i].pre;
}while(i!=0);
}

void RESTORE(int maze[m2][n2])
{
for(int i=0;i<m2;i++)
for(int j=0;i<n2;j++)
if(maze[i][j]==-1)
maze[i][j]=0;
}
请问我的迷宫为什么走不出来???我一输完,就出不来结果??
输入
0 1 1 1 0 1 1 1
1 0 1 0 1 0 1 0
0 1 0 0 1 1 1 1
0 1 1 1 0 0 1 1
1 0 0 1 1 0 0 0
0 1 1 0 0 1 1 0
输出
(6,8)
(5,7)
(4,6)
(4,5)
(3,4)
(3,3)
(2,2)
(1,1)

???????????????



你打错了

void INPUT(int maze[m2][n2])
改成:void INPUT(int maze=[m2][n2])