博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杭电2102--A计划(Bfs)
阅读量:5732 次
发布时间:2019-06-18

本文共 2388 字,大约阅读时间需要 7 分钟。

题目:

骑士救公主,迷宫问题。做的时候思路不清晰,一直Wa, 其实就是没搞清楚从posa-->posb无论b是传送门还是路都会耗时1, 只不过经过传送门又传送到了下一个位置;一直在这个误区里走不出来;Tmdi.

bfs搜一遍就说明搜过来就说明posa一定为点,代码中又把特殊情况全部排除,

所以只有两种情况:

         '.' --->'#',

          '.'-->'.'(包含p, 为搜索结束条件),

瞬间明朗了很多啊。

ac代码:

#include 
#include
#include
#include
using namespace std;char map[2][12][12];int ac[4][2] = {
0, 1, 0, -1, -1, 0, 1, 0};int n, m, T;struct Maze{ int x, y, z, step; } r, s, t;bool Bfs(int x, int y, int z){ r.x = x; r.y = y; r.z = z; r.step = 0; queue
q; q.push(r); map[x][y][z] = '*'; while(!q.empty()) { s = q.front(); q.pop(); for(int i = 0; i < 4; i++) { t = s; t.y = s.y + ac[i][0]; t.z = s.z + ac[i][1]; t.step = s.step + 1; if(t.z >= 0 && t.y >= 0 && t.y < n && t.z < m && map[t.x][t.y][t.z] != '*') { if(map[t.x][t.y][t.z] == '#'){ map[t.x][t.y][t.z] = '*'; //标记为'*', 因为后面要标记传送到的地方, 不标记就成了断路; t.x = !s.x; } if(map[t.x][t.y][t.z] == 'P' && t.step <= T) return true; map[t.x][t.y][t.z] = '*'; q.push(t); } } } return false;} int main(){ int Qi; scanf("%d", &Qi); while(Qi--) { scanf("%d %d %d", &n, &m, &T); for(int i = 0; i < 2; i++) for(int j = 0; j < n; j++) for(int k = 0; k < m; k++) cin >> map[i][j][k]; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) //把不符题意的路全换成'*'; { if(map[0][i][j] == '#' && map[1][i][j] == '#') //上下两层相同位置处都为传送门; { map[0][i][j] = '*'; map[1][i][j] = '*'; } if(map[0][i][j] == '#' && map[1][i][j] == '*') //上下两层相同位置处一层为传送门, 一层为墙; { map[0][i][j] = '*'; } if(map[0][i][j] == '*' && map[1][i][j] == '#')//同上; { map[1][i][j] = '#'; } } if(Bfs(0, 0, 0)) printf("YES\n"); else printf("NO\n"); } return 0; }

 

转载于:https://www.cnblogs.com/soTired/p/4761122.html

你可能感兴趣的文章
拥在怀里
查看>>
chm文件打开,有目录无内容
查看>>
whereis、find、which、locate的区别
查看>>
TRUNK
查看>>
一点不懂到小白的linux系统运维经历分享
查看>>
MDT 2013 从入门到精通之软件自动化部署设置
查看>>
桌面支持--打不开网页上的pdf附件解决办法(ie-tools-compatibility)
查看>>
桌面支持--outlook取消收件规则1
查看>>
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>
Project build error: Non-resolvable import POM
查看>>
Python 中的进程、线程、协程、同步、异步、回调
查看>>
swoft速学~redis引入
查看>>
LTS
查看>>
sublime插件自用
查看>>
Mysql客户端工具可以连接,但是代码访问就会报错
查看>>
Free Windows Applications
查看>>
好的产品原型具有哪些特点?
查看>>
实现java导出文件弹出下载框让用户选择路径
查看>>