FZU Problem 2028 时空门问题
Problem Description
Input
Output
Sample Input
Sample Output
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define N 505
#define M 505
int n,m,step,si,sj,ti,tj,dir[][]={{,},{-,},{,},{,-}};
char map[N][M];
bool flag[N][M];
struct point{
int x,y;
point (int x,int y):x(x),y(y){}
};
vector<point>v[N][M];//把vector容器变为数组型的容器,方便数据的存储,
struct node
{
int x,y,t;
node(int x,int y,int t):x(x),y(y),t(t){}
node(){}
};
queue<node>q;
void bfs()
{
while(!q.empty())
q.pop();
q.push(node(si,sj,));
map[si][sj]='#';
int x,y,t;
node n1;
while(!q.empty())
{
n1=q.front();q.pop();
for(int i=;i<;i++)//常规的四个方向的寻找
{
x=n1.x+dir[i][];
y=n1.y+dir[i][];
if(map[x][y]!='#')
{
t=n1.t+;
map[x][y]='#';
if(x==ti && y==tj)
{
step=t;
return ;
}
q.push(node (x,y,t));
}
}
int len=v[n1.x][n1.y].size();
for(int i=;i<len;i++)//取出满足条件的点,进行穿梭,然后再进行存储;
{
x=v[n1.x][n1.y][i].x;
y=v[n1.x][n1.y][i].y;
if(map[x][y]!='#')
{
t=n1.t+;
map[x][y]='#';
if(x==ti && y==tj)
{
step=t;
return ;
}
q.push(node (x,y,t));
}
}
}
}
int main()
{
int i,j;
while(cin>>n>>m)
{
memset(map,'#',sizeof(map));
getchar();
for( i = ; i <= n; ++i )
{
gets(map[i]+);
for( j = ; j <= m; ++j )
{
v[i][j].clear();
if( map[i][j] == 's' ) si = i, sj = j;
else if( map[i][j] == 't' ) ti = i, tj = j;
}
}
int k,xx,yy;
for( i = ; i <= n; ++i )
{
for( j = ; j <= m; ++j )
{
scanf("%d", &k);
while(k--)
{
scanf("%d%d", &xx, &yy);
v[i][j].push_back(point(xx,yy));//这个二维的容器很好用,我也是刚学会的
}
}
}
bfs();
cout<<step<<endl;
}
return ;
}
FZU Problem 2028 时空门问题的更多相关文章
- FZU Problem 2028 时空门问题(DFS+优化)
一开始是MLE,后来想到了用vector,化二维为一维,做了这一步优化后,这就是很基础的一个广搜了 #include<iostream> #include<cstdio> #i ...
- FZu Problem 2233 ~APTX4869 (并查集 + sort)
题目链接: FZu Problem 2233 ~APTX4869 题目描述: 给一个n*n的矩阵,(i, j)表示第 i 种材料 和 第 j 种材料的影响值,这个矩阵代表这n个物品之间的影响值.当把这 ...
- FZu Problem 2236 第十四个目标 (线段树 + dp)
题目链接: FZu Problem 2236 第十四个目标 题目描述: 给出一个n个数的序列,问这个序列内严格递增序列有多少个?不要求连续 解题思路: 又遇到了用线段树来优化dp的题目,线段树节点里 ...
- 翻翻棋(找规律问题)(FZU Problem 2230)
题目是这样的: FZU Problem 2230 象棋翻翻棋(暗棋)中双方在4*8的格子中交战,有时候最后会只剩下帅和将.根据暗棋的规则,棋子只能上下左右移动,且相同的级别下,主动移动到地方棋子方将吃 ...
- FZU 2028 时空门问题
题目链接:时空门问题 简单bfs,每个格子移动的方式除了上下左右,还有时空门,开始想着用邻接表保存每个点能通过时空门到达的点就ok了.很快的敲出来,很快的WA了.长久的dbug并没有发现error.然 ...
- fzu Problem 2148 Moon Game(几何 凸四多边形 叉积)
题目:http://acm.fzu.edu.cn/problem.php?pid=2148 题意:给出n个点,判断可以组成多少个凸四边形. 思路: 因为n很小,所以直接暴力,判断是否为凸四边形的方法是 ...
- fzu Problem 2140 Forever 0.5(推理构造)
题目:http://acm.fzu.edu.cn/problem.php?pid=2140 题意: 题目大意:给出n,要求找出n个点,满足: 1)任意两点间的距离不超过1: 2)每个点与(0,0)点的 ...
- Fzu Problem 2082 过路费 LCT,动态树
题目:http://acm.fzu.edu.cn/problem.php?pid=2082 Problem 2082 过路费 Accept: 528 Submit: 1654Time Limit ...
- FZU Problem 2169 shadow
http://acm.fzu.edu.cn/problem.php?pid=2169 题目大意: S王国有N个城市,有N-1条道路.王都为编号1的城市.叛军驻扎在很多城市.除了王都外有K个城市有军队, ...
随机推荐
- sublime Text3 JsFormat
https://github.com/sprinng/JsFormat 下载解压 放到 首选项 --> 浏览插件目录 重启sublime ctrl+shift+p 安装 使用: 右键JsForm ...
- uploadify上传之前判断一个input输入框是否为空
onUploadStart:function(file){ if ($("#ContractCode").val() == "") { alert(" ...
- python之函数用法getattr()
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法getattr() #getattr() #说明: ''' getattr(...) ...
- Megcup 2017 决赛第一题 规则
2017Megcup 2017Megcup决赛第三题题解 只做出了一道题,虽然慢慢地退出了前128名,但还是要记录一下. 10点钟开始,一看第一题很熟悉,因为研究过格点图中电流问题,其实就是求解线性方 ...
- 【LeetCode】45. Jump Game II
Jump Game II Given an array of non-negative integers, you are initially positioned at the first inde ...
- hadoop集群虚拟机配置
hadoop_1, hadoop_2, hadoop_3 用户名riluo 密码19841984 查看Linux自带的JDK是否已安装 (卸载centOS已安装的1.4) 安装好的CentOS会自带O ...
- Android快速开发不可或缺的11个工具类(下载)
功能分类:工具 支持平台:Android 运行环境:Eclipse 开发语言:Java 开发工具:Eclipse 源码大小:11.45KB 下载地址:ht ...
- DataTime? 的 GetValueOrDefault() 方法
DataTime? 转换为 DataTime类型 就可以调用 ToString() 自定义格式 @item.CreateDate.GetValueOrDefault().ToString(" ...
- 转:http协议学习
协议详解篇 2.1 HTTP/1.0和HTTP/1.1的比较 RFC 1945定义了HTTP/1.0版本,RFC 2616定义了HTTP/1.1版本. 笔者在blog上提供了这两个RFC中文版的下载地 ...
- RHCE7 管理II-3使用VIM编辑器
vim的不同版本: 1.vim-minial 提供vi和相关命令.在RHEL 7的最小安装中 2.vim-enhanced 提供vim命令.提供语法突出显示.文件类型插件和拼写检查等功能 3.vim- ...