loj 1377 (bfs)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1377
思路:这道题只要处理好遇到"*"这种情况就可以搞定了。我们可以用一个vector向量来记录所有的“*”,然后用一个3维数组来判重,并且对于每个状态都加一个标记,判断是否需要立刻转移,值得注意的是转移过后,vector应该立刻清空。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std; const int MAXN = ( + );
const int inf = ( << );
int n,m,ans;
char map[MAXN][MAXN];
vector<pair<int, int> >vet; struct Node{
int x, y, step, pre;
bool operator < (const Node &p ) const {
return p.step < step;
}
}st; bool mark[MAXN][MAXN][];
int dir[][]={{,-},{,},{-,},{,}}; void bfs()
{
memset(mark, false, sizeof(mark));
priority_queue<Node >que;
que.push(st);
mark[st.x][st.y][]=true;
while(!que.empty()){
Node q, p = que.top();
que.pop();
if(map[p.x][p.y] == 'D'){
ans = p.step;
return ;
}
if(map[p.x][p.y] == '*'){
bool flag = false;
for(int i = ; i < (int)vet.size(); i++){
pair<int, int>pp = vet[i];
if(pp.first == p.x&&pp.second == p.y){
flag = true;
continue;
}
if(!mark[pp.first][pp.second][]){
mark[pp.first][pp.second][] = true;
Node tmp;
tmp.x = pp.first, tmp.y = pp.second, tmp.step = p.step + , tmp.pre = ;
que.push(tmp);
}
}
vet.clear();
if(flag)vet.push_back(make_pair(p.x,p.y));
if(p.pre == )continue;
}
for(int i = ; i < ; i++){
q.x = p.x + dir[i][];
q.y = p.y + dir[i][];
if(map[q.x][q.y] == '#')continue;
if(!mark[q.x][q.y][]){
mark[q.x][q.y][] = true;
q.step = p.step + ;
q.pre = ;
que.push(q);
}
}
}
} int main()
{
int _case,t=;
scanf("%d",&_case);
while(_case--){
vet.clear();
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++){
scanf("%s", map[i] + );
for(int j=; j<=m; j++){
if(map[i][j] == 'P'){
st.x = i, st.y = j, st.step = , st.pre = ;
}else if(map[i][j] == '*') {
vet.push_back(make_pair(i,j));
}
}
}
ans = inf;
bfs();
printf("Case %d: ", t++);
if(ans == inf){
puts("impossible");
}else
printf("%d\n",ans);
}
return ;
}
loj 1377 (bfs)的更多相关文章
- loj 1185(bfs)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26898 思路:我们可以给定有直接边相连的两点的距离为1,那么就是求 ...
- loj 1165(bfs+康托展开)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26879 思路:题目意思很简单,就是通过一些位置的交换,最后变成有序 ...
- loj 1055(bfs)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26772 思路:注意判重就行,开个6维数组记录3个robots的位置 ...
- loj 1426(dfs + bfs)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1426 思路:首先我们预处理出每一个"*"在某一方向上最终能到达的位 ...
- loj 1046(bfs)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26766 思路:由于数据不是很大,我们可以枚举骑士最后聚集的位置,然 ...
- LOJ 3057 「HNOI2019」校园旅行——BFS+图等价转化
题目:https://loj.ac/problem/3057 想令 b[ i ][ j ] 表示两点是否可行,从可行的点对扩展.但不知道顺序,所以写了卡时间做数次 m2 迭代的算法,就是每次遍历所有不 ...
- 「LOJ#6121」「网络流 24 题」孤岛营救问题(BFS
题目描述 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩.瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图.迷宫的外形是一个长方形 ...
- LOJ #2877. 「JOISC 2014 Day2」交朋友 并查集+BFS
这种图论问题都挺考验小思维的. 首先,我们把从 $x$ 连出去两条边的都合并了. 然后再去合并从 $x$ 连出去一条原有边与一条新边的情况. 第一种情况直接枚举就行,第二种情况来一个多源 bfs 即可 ...
- LOJ #2876. 「JOISC 2014 Day2」水壶 BFS+最小生成树+倍增LCA
非常好的一道图论问题. 显然,我们要求城市间的最小生成树,然后查询路径最大值. 然后我们有一个非常神的处理方法:进行多源 BFS,处理出每一个城市的管辖范围. 显然,如果两个城市的管辖范围没有交集的话 ...
随机推荐
- 如何在maven中添加本地jar包
mvn install:install-file -DgroupId=mytest-DartifactId=test-Dversion=1.1 -Dpackaging=jar -Dfile=d:\te ...
- (转载)让XCode运行时自动更新资源
转自http://goldlion.blog.51cto.com/4127613/1351616 用过XCode的人都知道,XCode有一个臭名昭著的bug——除非你修改了源代码造成了重新编译,否则游 ...
- How to raise exceptions in Delphi
uses SysUtils; procedure RaiseMyException; begin raise Exception.Create('Hallo World!'); end;
- Node.js 字体格式转换 ttf2eot ttf2woff ttf2svg
前几天为了查找字体转换工具网上搜索,既然用 Node.js 来做的工具. https://github.com/fontello/ttf2eot https://github.com/fontello ...
- 阿里2014校招笔试题(南大)——利用thread和sleep生成字符串的伪随机序列
引言:题目具体描述记不大清了,大概是:Linux平台,利用线程调度的随机性和sleep的不准确性,生成一个各位均不相同的字符数组的伪随机序列.不得使用任何库函数.(这句记得清楚,当时在想线程库算不算, ...
- git remote 相关用法
为了便于管理,Git要求每个远程主机都必须指定一个主机名.git remote 命令就用于管理主机名. 不带选项的时候,git remote命令列出所有远程主机. $ git remote orig ...
- 轻轻送送为你的App加点特效
前言 今天突然在一个应用中看到一个转场动画,蛮有意思的 退出动画 进入动画 ActivityOptionsCompat options = ActivityOptionsCompat.makeScal ...
- POJ 1753 Flip game ( 高斯消元枚举自由变量)
题目链接 题意:给定一个4*4的矩阵,有两种颜色,每次反转一个颜色会反转他自身以及上下左右的颜色,问把他们全变成一种颜色的最少步数. 题解:4*4的矩阵打表可知一共有四个自由变元,枚举变元求最小解即可 ...
- balabalabala
[微分享]:种子不落在肥土而落在瓦砾中,有生命力的种子决不会悲观和叹气,因为有了阻力才有磨炼.
- 搞笑世界杯(codevs 1060)
题目描述 Description 随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有 人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比赛.你和你的朋 ...