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;
   }
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值