hdu 2828 Dogs

优先队列bfs,无难度,走x不用花时间,走“.”时间为1;

#include<iostream>
#include<queue>
#include<cstring>
#define  maxn 1000+5
using namespace std;
char mapp[maxn][maxn];
int visit[maxn][maxn];
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int n,m;
int sx,sy,ex,ey;
struct stu
{
	int x,y;
	int t;
	friend bool operator<(stu x,stu y)
	{
		return x.t>y.t;
	}
};
void bfs()
{
	stu x,y;
	priority_queue<stu>root;
	x.x=sx;
	x.y=sy;
	x.t=0;
	root.push(x);
	visit[sx][sy]=1;
	while(root.size())
	{
		x=root.top();
		root.pop();
		if(x.x==ex&&x.y==ey)
		{
			cout<<x.t<<endl;return;
		}
		for(int i=0;i<4;i++)
		{
			y.x=x.x+dir[i][0];
			y.y=x.y+dir[i][1];
			if(y.x<0||y.x>=n||y.y<0||y.y>=m||visit[y.x][y.y]){continue;}
			if(mapp[y.x][y.y]=='X') y.t=x.t;
			else y.t=x.t+1;
			root.push(y);
			visit[y.x][y.y]=1;
		}
	}
}
int main()
{
	while(cin>>n>>m&&n&&m)
	{
		for(int i=0;i<n;i++) cin>>mapp[i];
		cin>>sx>>sy>>ex>>ey;
		sx--;sy--;ex--;ey--;
		memset(visit,0,sizeof(visit));
		bfs();
	}
	return 0;
} 
时间: 2024-08-27 08:47:02

hdu 2828 Dogs的相关文章

HDU 2828 DLX搜索

Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 771    Accepted Submission(s): 230 Special Judge Problem Description There are several switches and lamps in the room, however, the connecti

hdu 2822 Dogs

Dogs Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 8   Accepted Submission(s) : 2 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description Prairie dog comes again! Someday o

hdu - 2822 Dogs (优先队列+bfs)

http://acm.hdu.edu.cn/showproblem.php?pid=2822 给定起点和终点,问从起点到终点需要挖几次只有从# 到 .或者从. 到  . 才需要挖一次. #include <cstdio> #include <queue> #include <cstring> using namespace std; const int maxn = 1001; int n,m; int sx,sy,ex,ey; char maze[maxn][maxn

HDU 2828 舞蹈链可重复覆盖

点击打开链接 题意:给n个灯,每个灯能保持亮的状态的条件给出,最后问能否将所有的灯都保持亮的状态,能的话输出每个开关的状态 思路:明显的舞蹈链可重复覆盖嘛,列为n个灯,然后行为每个开关开还是关,所以行要有2*m行,注意的是在跑舞蹈链的时候,每一个开关只能有开或关的状态,所以我们要判断一下它对应的状态是否走过 #include <vector> #include <stdio.h> #include <string.h> #include <stdlib.h>

[DLX反复覆盖] hdu 2828 Lamp

题意: 有N个灯M个开关 每一个灯的ON和OFF状态都能控制一个灯是否亮 给出N行,代表对于每一个灯 哪些开关的哪个状态能够使得第i个灯亮 思路: 这里须要注意一个问题 假设开关1的ON 状态和开关2的ON状态能使得1号灯亮 那么开关1.2同一时候处于ON的时候 1号灯也是亮的.意思就是仅仅要有一个开关使得灯亮,灯就亮了. 简单的DLX 反复覆盖 行为每一个开关的两个状态2*m行,列为n个灯 在搜索的同一时候标记一下哪个开关被用过了 那么还有一个状态也不能用了 代码: #include"stdi

[DLX重复覆盖] hdu 2828 Lamp

题意: 有N个灯M个开关 每个灯的ON和OFF状态都能控制一个灯是否亮 给出N行,代表对于每个灯 哪些开关的哪个状态可以使得第i个灯亮 思路: 这里需要注意一个问题 如果开关1的ON 状态和开关2的ON状态能使得1号灯亮 那么开关1.2同时处于ON的时候 1号灯也是亮的.意思就是只要有一个开关使得灯亮,灯就亮了. 简单的DLX 重复覆盖 行为每个开关的两个状态2*m行,列为n个灯 在搜索的同时标记一下哪个开关被用过了 那么另一个状态也不能用了 代码: #include"stdio.h"

DancingLinks刷题集

HDU 3663 Power Stations 精确覆盖 题意:每个城市i有xi->yi天可以成为发射站,发射站覆盖范围为与该站有一条边链接的城市. 同时,每个每天城市必须且只能被一个发射站覆盖 天数D<=5. 每个城市的发射站关闭后就不再开启.即只能选择一段区间. 问若能做到,则输出每个城市开启时间与关闭时间 否则输出No solution 做法: 1.天数城市可独立看待,故每个城市每天看做一列. 2.在此区间内取一段子区间,注意到D很小,可枚举起点时刻终点时刻,每个城市每个方案作为一行.

(KMP 水)Wow! Such Doge! -- hdu -- 4847

http://acm.hdu.edu.cn/showproblem.php?pid=4847 Wow! Such Doge! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4847 Description Chen, Adrian (November 7, 2013). “Doge Is An Ac- tually Good Inter

(KMP 水)Wow! Such Doge! -- hdu

http://acm.hdu.edu.cn/showproblem.php?pid=4847 Wow! Such Doge! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4847 Description Chen, Adrian (November 7, 2013). “Doge Is An Ac- tually Good Inter