FZU 2028 BFS+vector
一个普通的bfs 如果不看样例和input的解释...
四个0真是神样例 又被input误导 以为每个点都按顺序有标号 传送门的终点给的是一个点的标号
然后结果是什么呢?无尽的runtime error...持续了半个训练赛的runtime error..
然后其实传送门的终点给的是坐标 莫忘-1
然后vector莫忘清空
然后当bfs开始扫传送门的时候莫忘 b是不停在变的(至少在我写的程序中是) 所以for循环中v[][]括号中的应该是从队列中取出来的node的坐标
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<vector>
#include<queue>
using namespace std;
char ma[505][505];
struct node
{
int x,y,t;
};
int n,m;
vector <node >v[505][505];
bool vis[505][505];
bool check(node a)
{
if(a.x>=0&&a.x<n&&a.y>=0&&a.y<m&&ma[a.x][a.y]!='#'&&vis[a.x][a.y]==true)
return true;
return false;
}
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
int sx,sy;
void bfs()
{
node te;
te.x=sx;
te.y=sy;
te.t=0;
queue<node >q;
q.push(te);
vis[te.x][te.y]=false;
node b;
node c;
while(!q.empty())
{
te=q.front();
q.pop();
if(ma[te.x][te.y]=='t')
{
printf("%d\n",te.t);
return ;
}
for(int i=0;i<5;i++)
{
if(i<4)
{
b=te;
b.t++;
b.x+=dx[i];
b.y+=dy[i];
if(check(b))
{
q.push(b);
vis[b.x][b.y]=false;
}
}
else
{
b=te;
b.t++;
node f=b;
for(int k=0;k<v[b.x][b.y].size();k++)
{
c=v[b.x][b.y][k];
f=b;
f.x=c.x;
f.y=c.y;
if(check(f))
{
q.push(f);
vis[f.x][f.y]=false;
}
}
}
}
}
}
int main(){
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)
for(int k=0;k<m;k++)
{
vis[i][k]=true;
v[i][k].clear();
}
for(int i=0;i<n;i++)
{
scanf("%s",ma[i]);
}
for(int i=0;i<n;i++)
{
for(int k=0;k<m;k++)
{
int z;
scanf("%d",&z);
for(int j=1;j<=z;j++)
{
int x,y;
scanf("%d%d",&x,&y);
node te;
te.x=x-1;
te.y=y-1;
v[i][k].push_back(te);
}
}
}
bool shengshi=false;
for(int i=0;i<n;i++)
{
for(int k=0;k<m;k++)
{
if(ma[i][k]=='s')
{
shengshi=true;
sx=i;
sy=k;
break;
}
}
if(shengshi)
break;
}
bfs();
}
}
FZU 2028 BFS+vector的更多相关文章
- FZU 2028 时空门问题
题目链接:时空门问题 简单bfs,每个格子移动的方式除了上下左右,还有时空门,开始想着用邻接表保存每个点能通过时空门到达的点就ok了.很快的敲出来,很快的WA了.长久的dbug并没有发现error.然 ...
- FZU - 2150 bfs [kuangbin带你飞]专题一
题意:两个人玩很变态的游戏,将一个草坪的某两个点点燃,点燃的草坪可以向上下左右四个方向扩散,问能否将整块草坪上面的草都点燃.如果能,输出最短时间(^_^他们就能玩更变态的游戏了),如果不能,输出-1. ...
- FZU 2092 bfs+记忆化搜索
晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...
- FZU 2124 bfs+vis记录
第一次团队训练赛的题 自己看完题没看到不能用舌头吃道具..以为是什么贪心混合bfs..果断放弃..悄悄的背锅了 然后其实比较简单 只是利用vis记录的时候要分两种状态记录 有没有道具 每到一个地方 就 ...
- fzu 2150(bfs)
Problem 2150 Fire Game Accept: 693 Submit: 2657 Time Limit: 1000 mSec Memory Limit : 32768 KB ...
- DFS & BFS
DFS 深度优先 BFS 广度优先 DFS或者BFS都是在联通区域内遍历节点的方法 用在二叉树上DFS有preOreder,inOrder,postOrder,BFS就是层次遍历. 在二叉树上的节点, ...
- [LeetCode] Combination Sum (bfs)
Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C wher ...
- HDU 2433 Travel (最短路,BFS,变形)
题意: 给出一个图的所有边,每次从图中删除一条边,求任意点对的路径总和(求完了就将边给补回去).(有重边) 思路: #include <bits/stdc++.h> using names ...
- [LeetCode] BFS解决的题目
一.130 Surrounded Regions(https://leetcode.com/problems/surrounded-regions/description/) 题目: 解法: 这道题 ...
随机推荐
- 开源混淆工具ProGuard配置详解及配置实例
ProGuard的作用: 1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用. 2.创建的程序和程序库很难使用反向工程. 3.所以它能删除来自源文件中的没有调用的代码 4.充分利 ...
- windows 常用快捷键
快捷键,学会就可以扔掉鼠标. F1帮助 F2改名 F3搜索 F4地址 F5刷新 ...
- 食物链(codevs 1074)
题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并 ...
- NGITOSS
https://sourceforge.net/projects/ngnms/files/?source=navbar http://stackoverflow.com/questions/17511 ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
- 几个 Context 上下文的区别
转自:http://www.blogjava.net/fancydeepin/archive/2013/03/31/java-ee-context.html 在 java 中, 常见的 Context ...
- AppInventor学习笔记(三)——油漆桶应用学习
一.组件设置 1.画笔颜色选项 选取3个Button,然后改名为红.黄.绿三种颜色,然后进行相应属性的设置. 在这里有个问题就是如何放在一行.. 将3个按钮放进这个方框里面就可以变成一行了. 2.画布 ...
- Scala中的match(模式匹配)
文章来自:http://www.cnblogs.com/hark0623/p/4196261.html 转载请注明 代码如下: /** * 模式匹配 */ case class Class1(pa ...
- [MySQL]导入导出
[MySQL]导入导出 一 导入文本数据 1)mysql->load data infile 数据文件c:/mytable.txt 如下:(每一行为一条记录,记录的字段间用tab隔开,最后一个字 ...
- xcode命令行编译时:codesign命令,抛出“User interaction is not allowed.”异常 的处理
之前正常运行的hudson iOS编译服务器slave节点,忽然出现编译失败.发现原因有2个: 第一个原因是编译机上用来签名的用户帐号过期,第二个原因是操作系统和xCode升级造成的. 对于第一个,重 ...