• HDU2822_Dogs_广搜+优先队列


    题目大意:         有一只小狗要去找另一只小狗,两只小狗的坐标都知道,然后这个地图里只有两种元素,即房子还有草地,如果小狗经过房子,则不用花时间,如果经过的是草地,时间+1,最后算出小狗到达目标的时候所花费的最小时间。 解题思路:         用优先队列解决这道题目,还是比较好理解的。每次都从队列里面取出当前到达时间最小的一个点,然后由这个点进行扩展,到达目标。好像还可以用一般的队列做,但是一想起来就有点疼,感觉复杂了许多,要考虑把相邻的X都先入队吧。稍后再想想用一般队列做。 代码:
    #include
    #include
    const int MAX=1005;
    using namespace std;
    char map[MAX][MAX];
    
    typedef struct s
    {
    	int x,y;
    	int step;
    	s(int a=0): step(a){};
    	const bool operator < (const struct s &s1 ) const
    	{
    		return step>s1.step;
    	}
    }S;
    int visited[MAX][MAX];
    int n,m;
    int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
    
    int bfs(int sx,int sy,int ex,int ey)
    {
    	priority_queue Q;
    	S pre,cur;
    	pre.x=sx;
    	pre.y=sy;
    	pre.step=0;
    	Q.push(pre);
    	visited[pre.x][pre.y]=1;
    	while(!Q.empty())
    	{
    		pre=Q.top();
    		Q.pop();
    		cur=pre;
    		for(int i=0;i<4;i++)
    		{
    			cur.x=pre.x+dir[i][0];
    			cur.y=pre.y+dir[i][1];
    			cur.step=pre.step;
    			if(cur.x>=1&& cur.x<=m && cur.y>=1 && cur.y<=n 
    				&& visited[cur.x][cur.y]==0)
    			{
    				if(map[cur.x][cur.y]=='.')
    					cur.step=pre.step+1;
    				if(cur.x==ex && cur.y==ey)
    					return cur.step;
    				Q.push(cur);
    				visited[cur.x][cur.y]=1;
    			}
    		}
    	}
    	return -1;
    }
    void init()
    {
    	memset(visited,0,sizeof(visited));//注意初始化
    }
    int main(void)
    {
    	while(scanf("%d%d",&m,&n),n||m)//这里用cin果断超过1000ms,用scanf512ms飘过~还有,注意m是row,n是col
    	{
    		init();
    		int sx,sy,ex,ey;
    		for(int i=1;i<=m;i++)
    			scanf("%s",map[i]+1);
    		scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
    		int ans=bfs(sx,sy,ex,ey);
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    MVCC浅析
    brew 安装的.net 运行时提示"Did you mean to run dotnet SDK commands?"
    PyCharm for Mac 调整字体大小
    PowerShell 解决红字一闪而过问题
    Shell 环境变量也是变量
    软件选择的起点:目的与需求
    macOS 不用任何第三方工具 简单两步使用 Automator 将截图转成@1x
    Mac 查看 剪贴板/剪切板/粘贴板 内容与格式
    Docker 网络相关 (系统学习Docker04)
    Docker 的镜像和容器(系统学习Docker03)
  • 原文地址:https://www.cnblogs.com/cchun/p/2520194.html
Copyright © 2020-2023  润新知