zoukankan      html  css  js  c++  java
  • poj 3984 迷宫问题 bfs

            学会这道水题之后我懂得了不少哈,首先水题也能学到不少知识,尤其像我这样刚入门的小菜鸟,能学到一些小技巧。

         

            然后就是可以从别人的代码里学到不一样的思路和想法。


           这题就是求最短的路径,首先想到就是用bfs,但是求到最短之后不知道怎么输出了咋办?很着急有木有???


           基本的广搜题已经做的挺熟练的,但是这个记录路径还是没搞懂,大致的方向还是明白的,记录,递归输出。。。。


          然后我就找到了写得不错的代码。。然后加上了我“本地化”处理,啊哈~~~~~~~·

     

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    int map[5][5],vis[5][5],pre[100];
    struct loca{
    	int x;
    	int y;
    }list[50];
    
    int dir[8] = {0,1,0,-1,1,0,-1,0};
    
    int judge(int x,int y)
    {
    	if(x>=1&&x<5&&y>=0&&y<5&&!map[x][y])
    	    return 1;
        return 0;
    }
    
    void print(int x)   //递归输出哈,菜鸟学习了。。。
    {
    	int t;
    	t = pre[x];
    	if(t == 0)
    	{
    		printf("(0, 0)
    ");
    		printf("(%d, %d)
    ",list[x].x,list[x].y);
    		return ;
    	}
    	print(t);
    	printf("(%d, %d)
    ",list[x].x,list[x].y);
    }
    
    void bfs()
    {
    	int i,head,tail;
    	int x,y,xx,yy;
    	memset(vis,0,sizeof(vis));
    	head = 0;
    	tail = 1;
    	list[0].x = 0;
    	list[0].y = 0;
    	pre[0] = -1;
    	while(head < tail)
    	{
    		x = list[head].x;
    		y = list[head].y;
    		if(x ==4 && y==4)
    	    {
    	    	print(head);
    	    	return ;
    	    }
    	    for(i=0;i<8;i+=2)
    	    {
    	    	xx = x + dir[i];
    	    	yy = y + dir[i+1];
    	    	if(!vis[xx][yy] && judge(xx,yy))
    	    	{
    	    		vis[xx][yy] = 1;
    	    		list[tail].x = xx;
    				list[tail].y = yy;
    				pre[tail] = head;
    				tail++;
    			}
    		}
    		head ++;
    	}
    	return ;
    }
    
    int main(void)
    {
    	int i,j;
    	for(i=0;i<5;i++)
    	   for(j=0;j<5;j++)
    	      scanf("%d",&map[i][j]);
        bfs();
        return 0;
    }
    
    


        

        

  • 相关阅读:
    hdu5247找连续数(打表)
    hdu5246超级赛亚ACMer
    hdu5246超级赛亚ACMer
    cf534D 枚举握手次数
    cf534D 枚举握手次数
    4467奇妙的方式优化暴力的01边查询
    4467奇妙的方式优化暴力的01边查询
    POJ1364基本的查分约束问题
    POJ1364基本的查分约束问题
    poj1509最小表示法
  • 原文地址:https://www.cnblogs.com/pangblog/p/3249193.html
Copyright © 2011-2022 走看看