fzu2150——Fire Game(BFS)
2016-07-30 19:04
519 查看
题目要求从两个点开始BFS,一开始有点无从下手,但看了别人的解题报告后有了思路。
可以将这两个点看成从同一个超级源点出发,当然这个点在代码中没有直接体现,但这是个便于理解的方式。
可以将这两个点看成从同一个超级源点出发,当然这个点在代码中没有直接体现,但这是个便于理解的方式。
#include <iostream> #include <cstring> #include <string> #include <vector> #include <queue> #include <cstdio> #include <algorithm> #define INF 0x3f3f3f3f #define MAXN 1010 using namespace std; int dx[4]= {0,0,1,-1}; int dy[4]= {1,-1,0,0}; struct Node { int x,y,step; }; int n,m,vis[20][20]; vector<Node> v; char map[20][20]; int bfs(Node a,Node b,int s) { memset(vis,0,sizeof(vis)); queue<Node> q; q.push(a),q.push(b); vis[a.x][a.y]=vis[b.x][b.y]=1; int ans=INF,sum; if(a.x==b.x&&a.y==b.y) sum=1; else sum=2; while(!q.empty()) { Node tmp=q.front(),tmp1; q.pop(); //cout<<tmp.x<<" "<<tmp.y<<" "<<tmp.step<<endl; ans=tmp.step; for(int i=0; i<4; ++i) { tmp1=tmp; tmp1.x=tmp.x+dx[i]; tmp1.y=tmp.y+dy[i]; if(tmp1.x>=0&&tmp1.x<n&&tmp1.y>=0&&tmp1.y<m&&!vis[tmp1.x][tmp1.y]&&map[tmp1.x][tmp1.y]=='#') { vis[tmp1.x][tmp1.y]=1; sum++; tmp1.step++; q.push(tmp1); } } } //cout<<sum<<" "<<s<<endl; if(sum==s) return ans; else return INF; } int main() { ios::sync_with_stdio(false); int t,cnt=1; cin>>t; while(t--) { int ans=INF,sum=0; v.clear(); cin>>n>>m; for(int i=0; i<n; ++i) for(int j=0; j<m; ++j) { cin>>map[i][j]; if(map[i][j]=='#') { Node tmp; tmp.x=i,tmp.y=j,tmp.step=0; v.push_back(tmp); sum++; } } if(sum==0) { cout<<"Case"<<" "<<cnt++<<": "<<"0"<<endl; continue; } for(int i=0; i<v.size(); ++i) for(int j=0; j<v.size(); ++j) { ans=min(bfs(v[i],v[j],sum),ans); } if(ans==INF) cout<<"Case"<<" "<<cnt++<<": "<<"-1"<<endl; else cout<<"Case"<<" "<<cnt++<<": "<<ans<<endl; } return 0; }
相关文章推荐
- FZU2150(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
- FZU 2150 Fire Game(BFS)
- fzu 2150 Fire Game_(bfs)
- FZU 2150 Fire Game (BFS)
- FZU 2150 Fire Game (BFS_好题)
- FZU 2150 Fire Game(BFS)
- FZU Problem 2150 Fire Game (双起点BFS啊 )
- FZU 2150 Fire Game(多起点bfs)
- FZU FZOJ 2150 Fire Game( bfs过)
- FZU2150 Fire Game —— BFS
- FZU 2150 Fire Game (DFS + BFS)
- FZU 2150 Fire Game (两点BFS)
- FZU 2150 Fire Game (暴搜/ BFS+DFS)
- FZU2150 Fire Game(BFS)