#include<stdio.h>
#include<stdlib.h>
#define num 5
int dx[4]={1,0,-1,0};
int dy[4]={0,-1,0,1}; //dx dy用来方便访问该点4个方向上邻接点
int data[5][5]; //迷宫数据
struct node
{
int x,y,pre;
}queue[100]; //队列
int visit[num][num]={0};
void output(int point);
int gonext(int a,int b);
void input() ;
void bfs(int a,int b);
int gonext(int a,int b) //判断该点是否可访问
{
if(0<=a&&a<=4&&0<=b&&b<=4&&data[a][b]==0 )
return 1;
else
return 0;
}
void input() //初始化迷宫
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&data[i][j]);
}
void bfs(int a,int b)
{ int front,rear;
int i;
int j=0;
int next_x,next_y;//邻接点坐标
front=0;
rear=1;
queue[front].x=a;
queue[front].y=b;
queue[front].pre=-1;
while(front<rear)
{
for(i=0;i<4;i++)
{
next_x=queue[front].x+dx[i];
next_y=queue[front].y+dy[i];
if(gonext(next_x,next_y)==1&&visit[next_x][next_y]==0)
{
visit[next_x][next_y]=1;//已访问
queue[rear].x=next_x;
queue[rear].y=next_y;
queue[rear].pre=front;
rear++;
}
if( next_x == 4 &&next_y == 4)
{
printf("(0, 0)\n");
output(rear-1);
return 0 ;
}
}
front++;
}
}
void output(int point)
{
if(queue[point].pre!=-1)
{
output( queue[point].pre);
printf("(%d, %d)\n", queue[point].x, queue[point].y);
}
}
int main(void)
{
input();
bfs(0,0);
return 0;
}
ACM 迷宫问题 poj3984(c语言)
最新推荐文章于 2020-02-01 13:12:04 发布