UVA 11624
Posted huluxin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 11624相关的知识,希望对你有一定的参考价值。
可能有多个着火点。
进行两次bfs。先将着火点预处理,记录地图中每个点被燃烧的最短时间,再让J开始走,每一步走的时间必须小于该点被燃烧的最短时间。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 using namespace std; 8 struct node 9 { 10 int x,y,step; 11 }s,f[1000]; 12 char a[1010][1010]; 13 int fir[1010][1010],vis[1010][1010],n,m,flag,k; 14 int dir[4][2]={-1,0,1,0,0,-1,0,1}; 15 void bfs1() 16 { 17 node temp,next; 18 queue<node>q; 19 for(int i=0;i<k;i++) 20 q.push(f[i]); 21 while(!q.empty()) 22 { 23 temp=q.front(); 24 q.pop(); 25 if(fir[temp.x][temp.y]>temp.step) 26 fir[temp.x][temp.y]=temp.step; 27 for(int i=0;i<4;i++) 28 { 29 next.x=temp.x+dir[i][0]; 30 next.y=temp.y+dir[i][1]; 31 next.step=temp.step+1; 32 if(next.x>=0&&next.y>=0&&next.x<n&&next.y<m&&a[next.x][next.y]!=‘#‘&&vis[next.x][next.y]==0) 33 { 34 q.push(next); 35 vis[next.x][next.y]=1; 36 } 37 38 } 39 } 40 } 41 void bfs() 42 { 43 node temp,next; 44 queue<node>q; 45 q.push(s); 46 while(!q.empty()) 47 { 48 temp=q.front(); 49 q.pop(); 50 for(int i=0;i<4;i++) 51 { 52 next.x=temp.x+dir[i][0]; 53 next.y=temp.y+dir[i][1]; 54 next.step=temp.step+1; 55 if(next.x<0||next.y<0||next.x>=n||next.y>=m) 56 { 57 printf("%d ",next.step); 58 flag=1; 59 return; 60 } 61 if(a[next.x][next.y]!=‘#‘&&vis[next.x][next.y]==0&&next.step<fir[next.x][next.y]) 62 { 63 q.push(next); 64 vis[next.x][next.y]=1; 65 } 66 67 } 68 } 69 } 70 int main(int argc, char *argv[]) 71 { 72 int t; 73 scanf("%d",&t); 74 while(t--) 75 { 76 scanf("%d%d",&n,&m); 77 for(int i=0;i<n;i++) 78 scanf("%s",a[i]); 79 memset(fir,0x3f,sizeof(fir)); 80 memset(vis,0,sizeof(vis)); 81 k=0; 82 for(int i=0;i<n;i++) 83 for(int j=0;j<m;j++) 84 { 85 if(a[i][j]==‘J‘) 86 { 87 s.x=i;s.y=j;s.step=0; 88 } 89 if(a[i][j]==‘F‘) 90 { 91 f[k].x=i;f[k].y=j;f[k].step=0; 92 vis[f[k].x][f[k].y]=1;k++; 93 } 94 } 95 96 97 bfs1(); 98 flag=0; 99 memset(vis,0,sizeof(vis)); 100 bfs(); 101 if(!flag) 102 printf("IMPOSSIBLE "); 103 } 104 return 0; 105 }
以上是关于UVA 11624的主要内容,如果未能解决你的问题,请参考以下文章