博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1429胜利大逃亡(续)&&HDU 1885 Key Task BFS+状态压缩+水
阅读量:4309 次
发布时间:2019-06-06

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

HDU1429

只有10把钥匙 1<<10足够了

标记用三维数组

用Linux好不习惯 继续克服~

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define MAXN 11111#include
const int INF = 999999;char mp[33][33];bool vis[33][33][1026];int n,m;struct node{ int x,y,step; int key;};queue
q;int xx[4]= {1,0,-1,0};int yy[4]= {0,1,0,-1};int bfs(int x,int y){ while(!q.empty()) q.pop(); memset(vis,false,sizeof(vis)); node front,rear; front.x=x,front.y=y; front.key=0; front.step=0; vis[x][y][0]=true; q.push(front); while(!q.empty()) { front=q.front(); q.pop(); for(int i=0; i<4; i++) { int dx=front.x+xx[i],dy=front.y+yy[i]; if(dx>=0&&dy>=0&&dx
='a'&&mp[dx][dy]<='z')//拿到钥匙 { vis[dx][dy][front.key]=true;//标记 rear.key =(front.key )| ( 1<<(mp[dx][dy]-'a'));//添加钥匙 rear.x=dx,rear.y=dy,rear.step=front.step+1; q.push(rear); } else if(mp[dx][dy]>='A'&&mp[dx][dy]<='Z')//遇到门 { if(front.key&(1<<(mp[dx][dy]-'A')))//如果有对应的钥匙 { rear.x=dx,rear.y=dy,rear.key=front.key,rear.step=front.step+1; vis[dx][dy][rear.key]=true; q.push(rear); } } else { rear.x=dx,rear.y=dy,rear.key=front.key,rear.step=front.step+1; vis[dx][dy][rear.key]=true; q.push(rear); } } } } return 0;}int main(){ int t; // freopen("in.txt","r",stdin); while(scanf("%d%d%d",&n,&m,&t)!=EOF) { node s; for(int i=0; i
=t) printf("-1\n"); else printf("%d\n",ans); } return 0;}

HDU1885

这个就4把钥匙

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define MAXN 11111#include
const int INF = 999999;char mp[133][133];bool vis[133][133][33];int n,m;int ke[28];struct node{ int x,y,step; int key;};queue
q;int xx[4]= {1,0,-1,0};int yy[4]= {0,1,0,-1};int bfs(int x,int y){ while(!q.empty()) q.pop(); memset(vis,false,sizeof(vis)); node front,rear; front.x=x,front.y=y; front.key=0; front.step=0; vis[x][y][0]=true; q.push(front); while(!q.empty()) { front=q.front(); q.pop(); for(int i=0; i<4; i++) { int dx=front.x+xx[i],dy=front.y+yy[i]; if(dx>=0&&dy>=0&&dx
='a'&&mp[dx][dy]<='z')//拿钥匙 { vis[dx][dy][front.key]=true; rear.key =(front.key )| ( 1<<(ke[mp[dx][dy]-'a'])); rear.x=dx,rear.y=dy,rear.step=front.step+1; q.push(rear); } else if(mp[dx][dy]>='A'&&mp[dx][dy]<='Z')//开门 { if(front.key&(1<<(ke[mp[dx][dy]-'A']))) { rear.x=dx,rear.y=dy,rear.key=front.key,rear.step=front.step+1; vis[dx][dy][rear.key]=true; q.push(rear); } } else { rear.x=dx,rear.y=dy,rear.key=front.key,rear.step=front.step+1; vis[dx][dy][rear.key]=true; q.push(rear); } } } } return 0;}int main(){ //freopen("in.txt","r",stdin); ke['a'-'a']=0,ke['b'-'a']=1,ke['r'-'a']=2,ke['g'-'a']=3; while(scanf("%d%d",&n,&m),n+m) { node s; for(int i=0; i

转载于:https://www.cnblogs.com/kewowlo/p/4002588.html

你可能感兴趣的文章
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>
Centos6安装图形界面(hdp不需要,hdp直接从github上下载数据即可)
查看>>
CentOS7 中把yum源更换成163源
查看>>
关于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
查看>>
linux下载github中的文件
查看>>
HDP Sandbox里面git clone不了数据(HTTP request failed)【目前还没解决,所以hive的练习先暂时搁置了】
查看>>
动态分区最佳实践(一定要注意实践场景)
查看>>