博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HihoCoder 1328 BFS 搜索
阅读量:5226 次
发布时间:2019-06-14

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


BFS模板

状态标记为四元组(x,y,key,t),二进制表示得到的钥匙

注意:

== 的运算优先级比 & 高

一个位置可以有多把钥匙,而且钥匙可以在对应的门里面。

所以要先判断门可不可以进,在判断可不可以得到新钥匙。

#include 
#include
#include
#include
#include
using namespace std;const int N = 1e6 + 5;int n,m,k,a,b,c,d;struct Node{ int x,y; int key; int t; Node(){} Node(int a,int b,int c,int d): x(a), y(b), key(c), t(d) {}};int kx[6],ky[6];bool vis[N];int dirx[] = {0,1,0,-1};int diry[] = {1,0,-1,0};void init(){ memset(vis, 0, sizeof(vis));}char mp[105][105];int getStatus(int x, int y, int key){ return x*10000+y*100+key;}int getkey(int x, int y){ int key = 0; for(int i = 0; i < k; i++) { if(x == kx[i] && y == ky[i]) { key |= 1 << i; } } return key;}int bfs(){ queue
Q; int st = getStatus(a,b,0); vis[st] = 1; Q.push(Node(a,b,0,0)); while(!Q.empty()) { Node node = Q.front(); Q.pop(); int x = node.x, y = node.y, key = node.key, t = node.t; if(x == c && y == d) return t; for(int i = 0; i < 4; i++) { int nx = x + dirx[i], ny = y + diry[i], nt = t + 1, nkey = key; if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue; if(mp[nx][ny] == '#') continue; if(isupper(mp[nx][ny])) { int p = mp[nx][ny] - 'A'; if((nkey & (1<
0) { nkey |= p; } int st = getStatus(nx,ny,nkey); if(vis[st]) continue; vis[st] = 1; Q.push(Node(nx,ny,nkey,nt)); } } return -1;}int main(){ scanf("%d%d%d%d%d%d%d", &n,&m,&k,&a,&b,&c,&d); getchar(); for(int i = 0; i < n; i++) gets(mp[i]); for(int i = 0; i < k; i++) { scanf("%d%d", &kx[i], &ky[i]); } init(); int t = bfs(); printf("%d\n", t); return 0;}

转载于:https://www.cnblogs.com/Alruddy/p/7468039.html

你可能感兴趣的文章
sql server 使用链接服务器远程查询
查看>>
JavaScript中的继承
查看>>
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
转:探讨跨域请求资源的几种方式
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
Android 开发 ThreadPool(线程池) 总结
查看>>
【poj1568】 Find the Winning Move
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
TP框架中的page分页实现
查看>>
[转]跨越千年的RSA算法
查看>>
传奇学者应明生
查看>>
【程序执行原理】
查看>>
第二次项目冲刺(Beta阶段)5.24
查看>>
python的多行注释
查看>>
连接Oracle需要jar包和javadoc文档的下载
查看>>
UVA 10976 - Fractions Again?!
查看>>
Dreamweaver cc新版本css单行显示
查看>>