胜利大逃亡(续)(bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1429
- #include <stdio.h>
- #include <queue>
- #include <string.h>
- using namespace std;
- struct node
- {
- int x,y;
- int state;
- int step;
- } s,t;
- int Time,n,m;
- int s_x,s_y,e_x,e_y;
- char a[][];
- int vis[][][];//标记状态
- int dir[][] = {{,},{-,},{,-},{,}};
- void bfs()
- {
- memset(vis,,sizeof(vis));
- queue<node>q;
- s.x = s_x;
- s.y = s_y;
- s.state = ;
- s.step = ;
- q.push(s);
- vis[s_x][s_y][s.state] = ;
- while(!q.empty())
- {
- t = q.front();
- q.pop();
- int x = t.x;
- int y = t.y;
- if (x==e_x&&y==e_y)
- {
- Time = t.step;
- return ;
- }
- for (int i = ; i < ; i++)
- {
- int dx = x+dir[i][];
- int dy = y+dir[i][];
- if (dx>=&&dx<n && dy>=&&dy<m && (!vis[dx][dy][t.state]) && a[dx][dy]!='*')
- {
- if (a[dx][dy]=='.'||a[dx][dy]=='^'||a[dx][dy]=='@')
- {
- vis[dx][dy][t.state] = ;
- s.x = dx;
- s.y = dy;
- s.step=t.step+;
- s.state = t.state;
- q.push(s);
- }
- else if (a[dx][dy]>='A' && a[dx][dy]<='J')
- {
- if ((<<(a[dx][dy]-'A'))&t.state)//判断是否拿到过能打开当前门的钥匙
- {
- vis[dx][dy][t.state] = ;
- s.x = dx;
- s.y = dy;
- s.step = t.step+;
- s.state = t.state;
- q.push(s);
- }
- }
- else if (a[dx][dy]>='a' && a[dx][dy] <= 'j')
- {
- int state= ((<<(a[dx][dy]-'a'))|t.state);//更新此时拿到的钥匙的状态
- if (!vis[dx][dy][state])
- {
- vis[dx][dy][state] = ;
- s.x = dx;
- s.y = dy;
- s.step = t.step+;
- s.state = state;
- q.push(s);
- }
- }
- }
- }
- }
- }
- int main()
- {
- int t;
- while(~scanf("%d%d%d%*c",&n,&m,&t))
- {
- Time = -;
- for (int i = ; i < n; i++)
- scanf("%s",a[i]);
- for (int i = ; i < n; i++)
- {
- for (int j = ; j < m; j++)
- {
- if (a[i][j]=='@')
- {
- s_x = i;
- s_y = j;
- }
- if (a[i][j]=='^')
- {
- e_x = i;
- e_y = j;
- }
- }
- }
- bfs();
- if (Time < t && Time!=-)
- printf("%d\n",Time);
- else
- printf("-1\n");
- }
- return ;
- }
胜利大逃亡(续)(bfs)的更多相关文章
- hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- hdu 1429 胜利大逃亡(续)(bfs+位压缩)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- hdu 1429 胜利大逃亡(续) (bfs+状态压缩)
又开始刷题了 题意:略过. 分析:主要是确定状态量,除了坐标(x,y)之外,还有一个key状态,就好比手上拿着一串钥匙.状态可以用位运算来表示:key&(x,y)表示判断有没有这扇门的钥匙,k ...
- HDOJ 1429 胜利大逃亡(续) (bfs+状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 思路分析:题目要求找出最短的逃亡路径,但是与一般的问题不同,该问题增加了门与钥匙约束条件: 考虑 ...
- hdu_1429_胜利大逃亡(续)(BFS状压)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 题意:迷宫的加强版,迷宫里有钥匙和门,问在指定的时间下能否逃出 题解:用二进制位来记录是否有该门 ...
- hdu - 1429 胜利大逃亡(续) (bfs状态压缩)
http://acm.hdu.edu.cn/showproblem.php?pid=1429 终于开始能够做状态压缩的题了,虽然这只是状态压缩里面一道很简单的题. 状态压缩就是用二进制的思想来表示状态 ...
- 胜利大逃亡(续)(状态压缩bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 胜利大逃亡(续)(bfs+状态压缩)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 胜利大逃亡(续)hdu1429(bfs)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
随机推荐
- 预处理、const、static、sizeof
1.预处理和宏定义 #define xxxx #ifdef xxxx ; #elseif xxxx; #endif 2.c++求随机数 rand(),rand()会返回一随机数值, 范围在0至RAND ...
- shell脚本网络流量实时查看
Linux网络流量实时查看脚本,Centos默认没有自带流量查看工具,通过网上的资料做了一些修改 #!/bin/bash # Author: Ca0gu0 # Script Name: idev.sh ...
- day11-函数对象、名称空间和作用域
目录 函数对象 函数的嵌套 名称空间和作用域 内置名称空间 全局名称空间 局部名称空间 作用域 全局作用域 局部作用域 global和nonlocal 函数对象 在Python中,一切皆对象,函数也是 ...
- Photoshop如何实现图片相对画布居中
先按ctrl+A,再选择要居中的图层,然后就会发现居中按钮被激活了
- 2.1.5、SparkEnv中创建MapOutputTracker
SparkEnv中创建MapOutputTracker def registerOrLookupEndpoint( name: String, endpointCreator: => RpcEn ...
- CSVHelper在Asp.Net MVC中的使用
1,从数据库读取数据,然后导出CSV文件 [HttpPost] public FileResult ExportCSV() { var apps =....//linq以及EF从数据库查询数据 Mem ...
- 循环A表,根据查询结果,更新A表字段
create or replace procedure prc_user_xtzx_match(p_flag out varchar2) IS xingming_match_loginname ); ...
- MYSQL 运维
http://www.eimhe.com/thread-142990-1-1.html http://www.eimhe.com/search.php?mod=forum&searchid=6 ...
- MVC.Net:添加第三方类库的bundles引用
以jQuery Mobile为例.当我们用nuget添加jQuery Mobile的package后,需要在项目中引用jQuery Mobile.传统的做法是在html页面上添加 <link h ...
- 多校第六场 1003 hdu 5355 Cake(贪心)
题目链接:(数据加强后wa了) hdu 5355 题目大意: 给出一个蛋糕.切成1~n大小的n块.问是否能在不继续分割的情况下拼凑出m等份. 题目分析: 首先我们是可以知道每份蛋糕的尺寸的,利用n*( ...