• [poj3984]迷宫问题_bfs


    迷宫问题

        题目大意:给你一个5*5的矩阵,求左上角到左下角的最短路径。

        注释:0或1的矩阵,1表示不能走,0表示能走,保证有唯一最短路径。

          想法:bfs爆搜练习题。通过其实点,定义方向数组,然后进行bfs遍历即可。

        最后,附上丑陋的代码... ...

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    using namespace std;
    struct Pair
    {
    	int x,y;
    };
    int a[10][10];
    queue<Pair> q;
    Pair before[10][10];
    Pair ans[50];
    bool dis[10][10];
    int d[5][3]={{0,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
    bool check(int x,int y)//判断当前点是否合法
    {
    	if(x>=0&&x<=4&&y>=0&&y<=4&&a[x][y]==0) return true;
    	return false;
    }
    int main()
    {
    	for(int i=0;i<5;i++)
    	{
    		for(int j=0;j<5;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}
    	Pair mid;
    	mid.x=0;
    	mid.y=0;
    	q.push(mid);//起始暴搜点
    	dis[0][0]=1;
    	while(!q.empty())
    	{
    		mid=q.front();q.pop();
    		int x=mid.x,y=mid.y;
    		if(x==4&&y==4) break;
    		for(int i=1;i<=4;i++)
    		{
    			if(check(x+d[i][1],y+d[i][2])&&dis[x+d[i][1]][y+d[i][2]]==false)
    			{
    				dis[x+d[i][1]][y+d[i][2]]=1;
    				Pair c;
    				c.x=x+d[i][1];c.y=y+d[i][2];
    				q.push(c);before[c.x][c.y]=mid;
    			}
    		}
    	}
    	Pair k;
    	k.x=4,k.y=4;
    	int cnt=0;
    	ans[++cnt]=k;
    	bool flag=false;
    	while(1)
    	{
    		if(flag) break;
    		k=before[k.x][k.y];
    		ans[++cnt]=k;
    		if(!k.x&&!k.y) flag=true; 
    	}
    	for(int i=cnt;i>=1;i--)//答案要求从左上角输出至右下角
    	{
    		printf("(%d, %d)
    ",ans[i].x,ans[i].y);
    	}
    	return 0;
    }
    

         小结:水题,注意bfs时需要pop以及边界特判。方向数组的第二维如果从一开始有意义的话需要多写一个0.

  • 相关阅读:
    Android.InstallDevelopmentEvn
    iOS.KVC.setValue:forKey:
    Business.Startup.Learning from Startup Mistakes at SpringSource
    职场.打造你自己的程序员品牌
    iOS.OpenSource.PopularProject
    iOS.Animation.CAMediaTiming
    Python.SQLAlchemy.1
    OpenSource.SerializationLibrary
    Python.SourceCodeSearchEngine
    iOS.WWDC
  • 原文地址:https://www.cnblogs.com/ShuraK/p/8661592.html
Copyright © 2020-2023  润新知