uva 11624 fire
来源:互联网 发布:天刀天香捏脸数据导入 编辑:程序博客网 时间:2024/06/16 13:20
这个题,需要不断更新坐标的状态,所以,需要先过一遍bfs,把所有可是被烧到的地方的时间进行标记,然后再次进行bfs的时候,就判断走到那里的时间是否在那个时间之内,就可以,然后思路有了,就是一直wawawa。后来发现一个小错误。
题目的意思解释一下,就是有一个人要逃跑,然后他走的路径,可能会被烧到也可能不会,烧的话是每秒都更新位置,从最开始的位置开始烧,然后向四周扩散,所以需要判断那个人走的最短路,走的路径上是否有火
#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>using namespace std;const int MAXN=1010;int n,m;char g[MAXN][MAXN];queue<pair<int,int> >q;int a[MAXN][MAXN];int mov[][2]= {{0,1},{0,-1},{1,0},{-1,0}};void bfs1(){ memset(a,-1,sizeof(a)); while(!q.empty())q.pop(); for(int i=0; i<n; i++) for(int j=0; j<m; j++) if(g[i][j]=='F') { a[i][j]=0; q.push(make_pair(i,j)); } while(!q.empty()) { pair<int,int> tmp=q.front(); q.pop(); int x=tmp.first; int y=tmp.second; for(int i=0; i<4; i++) { int tx=x+mov[i][0]; int ty=y+mov[i][1]; if(tx<0||ty<0||tx>=n||ty>=m)continue; if(a[tx][ty]!=-1)continue; if(g[tx][ty]=='#')continue; a[tx][ty]=a[x][y]+1; q.push(make_pair(tx,ty)); } }}int b[MAXN][MAXN];int bfs2(){ memset(b,-1,sizeof(b)); while(!q.empty())q.pop(); for(int i=0; i<n; i++) for(int j=0; j<m; j++) if(g[i][j]=='J') { q.push(make_pair(i,j)); b[i][j]=0; } while( !q.empty() ) { pair<int,int> tmp=q.front(); q.pop(); int x=tmp.first; int y=tmp.second; if(x==0 || y==0 || x==n-1 || y==m-1) return b[x][y]+1; for(int i=0; i<4; i++) { int tx=x+mov[i][0]; int ty=y+mov[i][1]; if(tx<0||ty<0||tx>=n||ty>=m)continue; if(b[tx][ty]!=-1)continue; if(g[tx][ty]=='#')continue; if(a[tx][ty]!=-1 && b[x][y]+1>=a[tx][ty])continue; b[tx][ty]=b[x][y]+1; q.push(make_pair(tx,ty)); } } return -1;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0; i<n; i++) scanf("%s",g[i]); bfs1(); int ans=bfs2(); if(ans==-1)printf("IMPOSSIBLE\n"); else printf("%d\n",ans); } return 0;}
阅读全文
0 0
- UVa 11624 - Fire!
- UVA 11624 - Fire!
- Uva-11624-Fire!
- uva 11624 Fire!
- uva 11624 - Fire!
- UVa 11624 - Fire!
- UVa 11624 Fire!
- UVA 11624 BFS Fire
- UVa Fire! 11624 (BFS)
- UVA - 11624 Fire!
- uva 11624 - Fire! bfs
- UVA 11624 Fire!
- UVa 11624 Fire! / BFS
- UVa:11624 Fire!
- UVA - 11624 Fire!
- UVa 11624 - Fire!
- uva 11624 Fire
- Uva 11624 Fire!
- 浙工大姗姗杯round1 A
- 一分钟了解“MATLAB对图像任意mask滤波”
- Charles截取到的请求为unknow
- JS点击事件 获取当前对象
- python -- 单线程、多线程SocketServer
- uva 11624 fire
- mySQL学习入门教程——5.常用的高级操作
- Spring学习笔记(2)——设计理念
- 循环冗余检验:CRC-16-CCITT查表法
- java中集合的遍历与增强for循环的使用
- Hibernate4教程四:关系映射
- eclipse最有用快捷键整理
- Zookeeper开源客户端框架Curator的简单使用
- 低功耗蓝牙BLE之广播(转载)