博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1242 Rescue
阅读量:5876 次
发布时间:2019-06-19

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

bfs问题。

Angel有被关在监狱,她有非常多朋友要去救她。

#表示墙,.表示路,x表示警卫,r表示她的朋友。

因为可能有非常多朋友,可是Angel仅仅有一个,所以搜索起点设为Angel。仅仅要找到一个朋友表示能走出去。

走一格须要1,杀死警卫须要1,假设使用 queue 不能直接加2.

由于会出现这样的情况

4 8axxxxxxr........................

假设直接加2的话,答案就不是9.

可是使用 priority_queue 就能够无视这样的情况了。我也要開始习惯使用priority_queue。

queue版本号。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x7fffffff#define eps 1e-8#define LL long long#define PI 3.141592654#define CLR(a,b) memset(a,b,sizeof(a))#define FOR(i,a,n) for(int i= a;i< n ;i++)#define debug puts("==fuck==")#define acfun std::ios::sync_with_stdio(false)#define SIZE 1000+10using namespace std;int xx[]={0,0,-1,1};int yy[]={-1,1,0,0};int n,m;char g[201][201];struct lx{ int x,y,lv; void init(int xx,int yy,int llv) { x=xx,y=yy,lv=llv; }};lx start,thend;void bfs(){ queue
q; bool vis[201][201]; CLR(vis,0); q.push(start); vis[start.x][start.y]=1; while(!q.empty()) { lx tmp=q.front(); q.pop();// printf("%d %d == %d\n",tmp.x,tmp.y,tmp.lv);// system("pause"); if(g[tmp.x][tmp.y]=='r') { printf("%d\n",tmp.lv); return ; } FOR(k,0,4) { int x=tmp.x+xx[k]; int y=tmp.y+yy[k]; if(x<0||y<0||x>=n||y>=m||g[x][y]=='#'||vis[x][y]) continue; lx now; if(g[x][y]=='x') { now.init(tmp.x,tmp.y,tmp.lv+1); g[x][y]='.'; } else { now.init(x,y,tmp.lv+1); vis[x][y]=1; } q.push(now); } } puts("Poor ANGEL has to stay in the prison all his life.");}int main(){ while(~scanf("%d%d",&n,&m)) { char str[201]; FOR(i,0,n) { scanf("%s",str); FOR(j,0,m) { g[i][j]=str[j]; if(g[i][j]=='a') start.init(i,j,0); } } bfs(); }}

priority_queue 版本号

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x7fffffff#define eps 1e-8#define LL long long#define PI 3.141592654#define CLR(a,b) memset(a,b,sizeof(a))#define FOR(i,a,n) for(int i= a;i< n ;i++)#define debug puts("==fuck==")#define acfun std::ios::sync_with_stdio(false)#define SIZE 200+10using namespace std;int xx[]={0,0,-1,1};int yy[]={-1,1,0,0};int n,m;char g[SIZE][SIZE];struct lx{ int x,y,lv; void init(int xx,int yy,int llv) { x=xx,y=yy,lv=llv; } friend bool operator< (lx a,lx b) { return a.lv>b.lv; }};lx start;void bfs(){ priority_queue
q; bool vis[SIZE][SIZE]; CLR(vis,0); vis[start.x][start.y]=1; q.push(start); while(!q.empty()) { lx tmp=q.top(); q.pop(); if(g[tmp.x][tmp.y]=='r') { printf("%d\n",tmp.lv); return ; } FOR(k,0,4) { int x=tmp.x+xx[k]; int y=tmp.y+yy[k]; if(x<0||y<0||x>=n||y>=m||vis[x][y]||g[x][y]=='#') continue; lx now; if(g[x][y]=='x') now.init(x,y,tmp.lv+2); else now.init(x,y,tmp.lv+1); vis[x][y]=1; q.push(now); } } puts("Poor ANGEL has to stay in the prison all his life.");}int main(){ while(~scanf("%d%d",&n,&m)) { char str[SIZE]; FOR(i,0,n) { scanf("%s",str); FOR(j,0,m) { g[i][j]=str[j]; if(g[i][j]=='a') start.init(i,j,0); } } bfs(); }}

转载地址:http://uizix.baihongyu.com/

你可能感兴趣的文章
找回使用Eclipse删除的文件
查看>>
移动开发Html 5前端性能优化指南
查看>>
《系统架构师》——操作系统和硬件基础
查看>>
如何看待一本图书
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
开发进度——4
查看>>
JS里验证信息
查看>>
Akka actor tell, ask 函数的实现
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>