哈理工 oj 2188 星际旅行
来源:互联网 发布:解除支付宝和淘宝绑定 编辑:程序博客网 时间:2024/04/30 01:34
星际旅行Time Limit: 1000 MSMemory Limit: 32768 KTotal Submit: 113(45 users)Total Accepted: 56(42 users)Rating: Special Judge: NoDescription
小z在星际旅行中,他想从当前起始点到达目的地,他可以上下左右的移动,并且每移动一格需要花费一单位时间,
星际中有许多危险的地方不可以走,还有许多的黑洞,你可以不花费任何时间从一个黑洞瞬间到达其它任何一个黑洞,
请你帮助小z计算从当前起始点到目的地最少需要多少单位时间。
Input第一行是一个整数T,代表T组测试数据。
对于每组测试数据,首先是两个整数n,m代表星际地图(1<=n<=100, 1<=m<=100)
接下来是一个n*m的地图。
'O' 代表黑洞。
'#' 代表不可以走的地方。
'.' 代表普通的空间。
'S' 代表起始点,有且只有一个。
'E' 代表目的地,有且只有一个。
Output对于每组测试数据,如果小z可以到达目的地,则输出需要的最少时间,否则输出"impossible"。
Sample Input2
3 4
SO..
....
..OE
3 3
#S#
###
E##
Sample Output2
impossible
思路简单,存下所有传送门位置,bfs扫到传送门后将所有传送门VIS记录为1,继续搜索;
#include<bits/stdc++.h>using namespace std;char maps[102][102];int black_hole[102 * 102][102];int vis[102][102];int n, m, x, y, num;int Step[4][2] = {1, 0, 0, 1, -1, 0, 0, -1};struct node{ int xx, yy, step;} op, uv;void bfs(int x, int y){ memset(vis, 0, sizeof vis); queue<node>q; op.xx = x; op.yy = y; op.step = 0; q.push(op); vis[x][y] = 1; while(!q.empty()) { op = q.front(); if(maps[op.xx][op.yy] == 'E') { printf("%d\n",op.step); return; } q.pop(); for(int i = 0; i < 4; i++) { uv.xx = op.xx + Step[i][0]; uv.yy = op.yy + Step[i][1]; if(uv.xx >=0 && uv.yy >= 0 && uv.xx < n && uv.yy < m && !vis[uv.xx][uv.yy] && maps[uv.xx][uv.yy] != '#') { if(maps[uv.xx][uv.yy] == '.' || maps[uv.xx][uv.yy] == 'E') { vis[uv.xx][uv.yy] = 1; uv.step = op.step + 1; q.push(uv); } if(maps[uv.xx][uv.yy] == 'O') { vis[uv.xx][uv.yy] = 1; for(int j = 0; j < num; j++) { if(!vis[black_hole[j][0]][black_hole[j][1]]) { uv.step = op.step + 1; uv.xx = black_hole[j][0]; uv.yy = black_hole[j][1]; vis[black_hole[j][0]][black_hole[j][1]] = 1; q.push(uv); } } } } } } printf("impossible\n"); return;}int main(){ int N; scanf("%d", &N); while(N--) { memset(black_hole, 0, sizeof black_hole); scanf("%d%d", &n, &m); for(int i = 0; i < n; i ++) scanf("%s", maps[i]); num = 0; for(int i = 0; i < n; i ++) { for(int j = 0; j < m; j ++) { if(maps[i][j] == 'O') { black_hole[num][0] = i; black_hole[num][1] = j; num ++; } if(maps[i][j] == 'S') { x = i; y = j; } } } bfs(x, y); }}
阅读全文
0 0
- 哈理工 oj 2188 星际旅行
- hrbust 哈理工oj 2188 星际旅行【BFS+传送阵】
- 哈理工 oj 2122 旅行(map + 最短路dij算法)
- 哈理工oj/hrbust 2122 旅行【dij+优先队列优化+邻接表+map】
- 哈理工OJ 2179(深搜)
- 哈理工 oj 1161 Leyni
- 哈理工OJ 1692【水题】
- 哈理工oj 2317 Game
- 哈理工oj 2002 幂集
- 【ctsc2010 星际旅行】
- acm-星际旅行
- 哈理工 oj 2189 节点的连接
- HLG 哈理工OJ 2074逃生
- 哈理工OJ 1926 函数式计算
- 哈理工OJ 2090 背包【思维】
- 哈理工OJ 2171 做菜【思维】
- 哈理工OJ 1431 摞盘子【水题】
- hrbust 哈理工oj 1588 神医【贪心】
- background简写属性
- 总结(12.3-12.10)
- codeforces 887B. Cubes for Masha
- Verilog中ISE联合Modelsim仿真,出现蓝线和红线的问题
- HOJ 2085 Wavio Sequence(双lis)
- 哈理工 oj 2188 星际旅行
- 校赛总结
- UI设计新手入门须知
- 语料库之专业名持续更新:【内向即失败--王奕君】
- 卷积函数-atrous_conv2d
- python正则表达式
- java系统属性
- Window 下安装 Memcached
- 语料库之常用字持续更新:【内向即失败--王奕君】