标签:str node bsp oid possible == empty ace amp
1 //两遍bfs 2 #include<bits/stdc++.h> 3 4 using namespace std; 5 6 const int MAXN = 1010; 7 8 int n,m; 9 char G[MAXN][MAXN]; 10 int fire[MAXN][MAXN]; 11 int Time[MAXN][MAXN]; 12 int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}}; 13 14 struct node{ 15 int x, y; 16 }last, now; 17 18 void bfs_Fire(){ 19 memset(fire,-1,sizeof(fire)); 20 queue< node > q; 21 for(int i = 0 ; i<n ; i++){ 22 for(int j = 0 ; j<m ; j++){ 23 if(G[i][j] == ‘F‘){ 24 fire[i][j] = 0; 25 last.x = i; 26 last.y = j; 27 q.push(last); 28 } 29 } 30 } 31 while(!q.empty()){ 32 last = q.front(); 33 q.pop(); 34 35 for(int i = 0 ; i<4 ; i++){ 36 now.x = last.x + dir[i][0]; 37 now.y = last.y + dir[i][1]; 38 39 if(now.x<0 || now.x>=n || now.y<0 || now.y>=m) 40 continue; 41 if(fire[now.x][now.y]!=-1) 42 continue; 43 if(G[now.x][now.y] == ‘#‘) 44 continue; 45 46 fire[now.x][now.y] = fire[last.x][last.y] + 1; 47 q.push(now); 48 } 49 } 50 } 51 52 int bfs(){ 53 queue< node > q; 54 memset(Time,-1,sizeof(Time)); 55 for(int i = 0 ; i<n ; i++){ 56 for(int j = 0 ; j<m ; j++){ 57 if(G[i][j] == ‘J‘){ 58 last.x = i; 59 last.y = j; 60 q.push(last); 61 Time[i][j] = 0; 62 } 63 } 64 } 65 66 while (!q.empty()){ 67 last = q.front(); 68 q.pop(); 69 70 if(last.x==0 || last.y==0 || last.x==n-1 || last.y==m-1) 71 return Time[last.x][last.y]+1; 72 73 for(int i = 0 ; i<4 ; i++){ 74 now.x = last.x+dir[i][0]; 75 now.y = last.y+dir[i][1]; 76 77 if(Time[now.x][now.y] != -1) 78 continue; 79 if(now.x<0 || now.x>=n || now.y<0 || now.y>=m) 80 continue; 81 if(G[now.x][now.y] == ‘#‘) 82 continue; 83 if(fire[now.x][now.y]!=-1 && Time[last.x][last.y]+1>=fire[now.x][now.y]) 84 continue; 85 86 Time[now.x][now.y] = Time[last.x][last.y] + 1; 87 q.push(now); 88 } 89 } 90 return -1; 91 } 92 93 int main(){ 94 int T; 95 scanf("%d",&T); 96 while (T--){ 97 scanf("%d %d",&n,&m); 98 for(int i = 0 ; i<n ; i++){ 99 scanf("%s",G[i]); 100 } 101 bfs_Fire(); 102 103 int ans = bfs(); 104 if(ans == -1) 105 printf("IMPOSSIBLE\n"); 106 else 107 printf("%d\n",ans); 108 } 109 return 0; 110 }
标签:str node bsp oid possible == empty ace amp
原文地址:https://www.cnblogs.com/jaydenouyang/p/9005201.html