hdu5094(BFS&状态压缩)
来源:互联网 发布:广电网络业绩 编辑:程序博客网 时间:2024/06/07 00:51
node里面多开一维,表示拥有钥匙的状态。
标记数组多开一维,vis[i][j][k]表示第i行第j列拥有钥匙的状态。
剩下的就是BFS。
这个题一个格子里面有可能有很多把钥匙,这是一个坑点,wa了2发。
#include<cstdio>#include<map>#include<queue>#include<cstring>using namespace std;const int bit = 1<<12;int n,m,p,k,numk;int bmap[55][55];struct node{ int x; int y; int step; int key; node(int a,int b,int c,int d):x(a),y(b),step(c),key(d){}};map<pair<int,int>,int> door;int vis[51][51][(1<<12)+5];int sumkey[55][55];int dir[4][2] = {1,0,-1,0,0,1,0,-1};void bfs(){ memset(vis,0,sizeof(vis)); queue<node>q; q.push(node(1,1,0,1|bmap[1][1])); vis[1][1][1|bmap[1][1]] = 1; while(!q.empty()) { node fr = q.front(); q.pop(); for(int i=0;i<4;i++) { int nx = fr.x+dir[i][0]; int ny = fr.y+dir[i][1]; int a = fr.x*m+fr.y; int b = nx*m+ny; int kk = door[make_pair(a,b)]; if(nx>n||ny>m||nx<=0||ny<=0||!(fr.key&(1<<kk))||vis[nx][ny][fr.key]) continue; if(nx==n&&ny==m) { printf("%d\n",fr.step+1); return ; } vis[nx][ny][fr.key|bmap[nx][ny]] = 1; q.push(node(nx,ny,fr.step+1,fr.key|bmap[nx][ny])); } } printf("-1\n");}int main(){ //printf("%d\n",(1<<12)*51*51); int x1,y1,x2,y2,w; while(scanf("%d%d%d",&n,&m,&p)!=EOF) { door.clear(); memset(bmap,0,sizeof(bmap)); memset(sumkey,0,sizeof(sumkey)); scanf("%d",&k); for(int i=0;i<k;i++) { scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&w); w++; door[make_pair(x1*m+y1,x2*m+y2)] = w; door[make_pair(x2*m+y2,x1*m+y1)] = w; } scanf("%d",&numk); while(numk--) { scanf("%d%d%d",&x1,&y1,&w); w++; bmap[x1][y1] |= (1<<w); } bfs(); } return 0;}
阅读全文
0 0
- hdu5094 状态压缩+bfs
- HDU5094->BFS&&状态压缩
- hdu5094(bfs,状态压缩)
- hdu5094 BFS+状态压缩
- hdu5094(BFS&状态压缩)
- 状态压缩(1)--hdu5094(状态压缩+bfs)(能力题)
- hdu5094 状态压缩dp+dps
- hdu5094 状压+bfs
- hdu5094(BFS+状压)
- BFS+状态压缩 HDU1429
- hdu1429(BFS+状态压缩)
- 状态压缩+bfs
- HDU_4856_Tunnels(BFS+状态压缩)
- bfs+状态压缩dp
- hdu1429 状态压缩+bfs
- [poj1324]状态压缩+BFS
- 状态压缩+bfs
- hdu4845 状态压缩BFS
- JavaScript 中 call 和 apply 实例分析
- Android tcp/ip socket http的理解
- 006
- Ubuntu下安装CodeBlocks
- Thinkphp5下引用极验验证码
- hdu5094(BFS&状态压缩)
- 痛みを感じろ、痛みを考えろ、痛みを受け取れ、痛みを知れ、痛みを知らぬ者に本当の平和を分からん。
- JavaScript计算消息推送时间差
- Jenkins+Gerrit创建新工程手顺
- nginx域名配置
- swift_039(Swift中的KVC的使用方法)
- 文章标题
- MailBee.NET Objects接收电子邮件(POP3)教程四:访问电子邮件附件
- Java时间格式转化