FZU 2150 Fire Game (两点BFS)
2018-03-29 19:30
519 查看
题意:
给出一个固定的板子,上面有草(#)和空地(.),草能被烧,并且1min后能向上下左右四个方向前进(前提是下个方向有草),问每次选两块草(这两块能一样),经过多少时间全烧完或者不能烧完(-1)。解法:
虽然是给了两个起始点,但其实是一样的。先将初始的两块草遍历,再代入bfs函数,注意bfs中的while循环里每次只需pop一次,因为这样就会完全遍历出每种情况。memset要写在bfs里 找了好久bug OrzAC代码:
#include <iostream> #include <algorithm> #include <queue> #include <cmath> #include <cstring> using namespace std; int n,m,grass; char board[11][11]; struct node //用于存储当前点的x,y { int x,y; int time; //当前点的深度 }; int disx[4]={1,-1,0,0}; //方向向量,用于当前点向下一点的移动 int disy[4]={0,0,1,-1}; struct locGrass //用于记录有草的board位置 { int x,y; }locGrass[105]; int vis[11][11]; //判断该草是否被烧 int bfs(node a,node b) { memset(vis,0,sizeof(vis)); //重要!每次取两点都要清零vis queue<node>q; node next,now; q.push(a); q.push(b); vis[a.x][a.y]=1; vis[b.x][b.y]=1; int temp=0; while(!q.empty()) { now=q.front(); q.pop(); for(int i=0;i<4;i++) { next.x=now.x+disx[i]; next.y=now.y+disy[i]; next.time=now.time+1; if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&board[next.x][next.y]=='#'&&vis[next.x][next.y]==0) //注意边界条件 { temp=max(temp,next.time); vis[next.x][next.y]=1; q.push(next); } } } int flag=1; for(int i=0;i<grass;i++) //判断草是不是都被烧了 { if(vis[locGrass[i].x][locGrass[i].y]==0) { flag=-1; break; } } if(flag==-1) return 1000; else if(flag==1) return temp; } int main() { int cases; cin>>cases; for(int i=1;i<=cases;i++) { cin>>n>>m; grass=0; for(int j=0;j<n;j++) cin>>board[j]; for(int j=0;j<n;j++) { for(int k=0;k<m;k++) { if(board[j][k]=='#') { locGrass[grass].x=j; locGrass[grass].y=k; grass++; } } } node a,b; int ans=1000; for(int j=0;j<grass;j++) { for(int k=j;k<grass;k++) { a.x=locGrass[j].x; a.y=locGrass[j].y; b.x=locGrass[k].x; b.y=locGrass[k].y; a.time=0; b.time=0; if(bfs(a,b)<ans) { ans=bfs(a,b); } } } if(ans==1000) cout<<"Case "<<i<<": -1"<<endl; else cout<<"Case "<<i<<": "<<ans<<endl; } return 0; }
相关文章推荐
- fzu 2150 Fire Game(两点同时bfs)
- FZU - 2150 Fire Game(两点bfs)
- FZU 2150 Fire Game 多起点BFS
- FZU2150——BFS——Fire Game
- FZU - 2150 Fire Game(15.10.10 搜索专题)bfs
- FZU FZOJ 2150 Fire Game( bfs过)
- FZU 2150 Fire Game(bfs)
- FZU 2150 Fire Game (双起点BFS)
- Fire Game--FZU2150(bfs)
- FZU ~ 2150 ~ Fire Game (双点BFS)
- FZU 2150 Fire Game (bfs)
- FZU 2150 Fire Game(dfs+bfs)
- FZU 2150 Fire Game 枚举BFS
- fzu 2150 Fire Game 【身手BFS】
- FZU 2150 Fire Game (暴力BFS)
- FZU 2150 Fire Game(BFS)
- FZU2150 Fire Game (bfs)
- 【Fzu】2150 Fire Game(BFS)
- FZU - 2150 Fire Game —— BFS
- fzu 2150 Fire Game(BFS)