UVa:11624 Fire!
来源:互联网 发布:网络淘宝涮单是真的嘛 编辑:程序博客网 时间:2024/05/14 09:03
多源bfs。注意J一开始就在边界的特殊情况。
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <algorithm>#define ll long long#define INF 200000000#define MOD 1000007#define MAXN 4000*1005using namespace std;char grid[1005][1005];int dist[1005][1005];int M[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};struct Point{ int x,y,time; Point(int a=0,int b=0,int c=0):x(a),y(b),time(c) {}};Point st;int R,C;bool Range(int x,int y){ if(x<1||y<1||x>R||y>C) return false; return true;}bool Safe(int x,int y){ if(x==1||x==R||y==1||y==C) return true; return false;}void bfs_fire(int x,int y){ queue<Point> que; que.push(Point(x,y,0)); dist[x][y]=0; while(!que.empty()) { Point p=que.front(); que.pop(); for(int i=0; i<4; ++i) { int nx=p.x+M[i][0],ny=p.y+M[i][1],t=p.time+1; if(!Range(nx,ny)||grid[nx][ny]=='#') continue; if(dist[nx][ny]<=t) continue; dist[nx][ny]=t; que.push(Point(nx,ny,t)); } }}bool vis[1005][1005];int bfs_J(int x,int y){ if(Safe(x,y)) return 0; queue<Point> que; que.push(Point(x,y,0)); memset(vis,0,sizeof(vis)); vis[x][y]=true; while(!que.empty()) { Point p=que.front(); que.pop(); for(int i=0; i<4; ++i) { int nx=p.x+M[i][0],ny=p.y+M[i][1],t=p.time+1; if(vis[nx][ny]||!Range(nx,ny)||grid[nx][ny]=='#'||t>=dist[nx][ny]) continue; vis[nx][ny]=true; if(Safe(nx,ny)) return t; que.push(Point(nx,ny,t)); } } return -1;}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d%d",&R,&C); for(int i=1; i<=R; ++i) scanf("%s",grid[i]+1); memset(dist,0x7f,sizeof(dist)); for(int i=1; i<=R; ++i) for(int j=1; j<=C; ++j) { if(grid[i][j]=='F') bfs_fire(i,j); else if(grid[i][j]=='J') { st.x=i; st.y=j; } } int ans=bfs_J(st.x,st.y); if(ans==-1) puts("IMPOSSIBLE"); else printf("%d\n",ans+1); } 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!
- 常用到的Web测试辅助工具
- android关于屏幕画图的一些度量单位及概念(sp,dp,px,dpi,density)
- Cocos2d-x 反复动画
- CF/359/C. Prime Number
- 【PHP自学笔记1】如何搭建配置PHP环境、云平台发布、第一个HelloWorld程序
- UVa:11624 Fire!
- IP摄像机
- 多线程笔试面试概念问答
- 如何将string转换为Date类型
- android串口通信实例分析
- BogoMips 提高
- UML 之 概述
- 黑马程序员-----反射
- ubuntu远程连接windows