ACM 迷宫问题 poj3984(c语言)

#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;
   }
	
    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/ICUICUICUICU/article/details/23115351
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞