FJNU校赛B题(dfs + bfs)
2015-04-20 17:43
309 查看
题意:
给出几个城市,以及街道,现在有几座城市着火了,尼克扑灭其中其中一些.然后剩下的火每天会往相邻的城市蔓延;问怎么选择扑灭的城市使全部烧完用时最长,输出时间;
思路:
dfs找到所有可能的扑灭情况,每种情况bfs算出要几天;
给出几个城市,以及街道,现在有几座城市着火了,尼克扑灭其中其中一些.然后剩下的火每天会往相邻的城市蔓延;问怎么选择扑灭的城市使全部烧完用时最长,输出时间;
思路:
dfs找到所有可能的扑灭情况,每种情况bfs算出要几天;
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<queue> using namespace std; int fire[10]; int vis[10]; int ans, n, m, l, p; vector<int> v[105]; struct point { int pos; int step; }; int bfs(); void dfs(int cur, int tar) { if(cur == p) { // for(int i = 0 ; i < l; i++) { // printf("%d ",vis[i]); // } // printf("\n"); int tmp = bfs(); // printf("%d\n",tmp); if(tmp > ans) ans = tmp; return; } if(tar >= l) return ; vis[tar] = 1; dfs(cur + 1,tar + 1); vis[tar] = 0; dfs(cur, tar + 1); return ; } int bfs() { queue<point> q; int viss[105]; memset(viss, 0, sizeof(viss)); while(!q.empty()) q.pop(); for(int i = 0; i < l; i++) { if(!vis[i]) { point a; a.pos = fire[i]; a.step = 0; q.push(a); viss[fire[i]] = 1; } } int res = 0; while(!q.empty()) { point cur = q.front(); if(cur.step > res) { res = cur.step; } q.pop(); for(int i = 0; i < v[cur.pos].size(); i++) { if(viss[v[cur.pos][i]]) continue; point a; a.pos = v[cur.pos][i]; a.step = cur.step + 1; q.push(a); viss[v[cur.pos][i]] = 1; } } return res; } int main() { int t; int cas = 1; scanf("%d",&t); while(t--) { ans = 0; memset(vis, 0, sizeof(vis)); scanf("%d%d%d%d",&n, &m, &l, &p); for(int i = 0; i <= n; i++) { v[i].clear(); } for(int i = 0; i < l; i++) { scanf("%d",&fire[i]); } int a,b; for(int i = 0; i < m; i++) { scanf("%d%d",&a,&b); v[a].push_back(b); v[b].push_back(a); } dfs(0,0); printf("Case %d: %d\n",cas++, ans + 1); } }
相关文章推荐
- FJNU校赛I题(dfs)
- 07年 ZZUPC校赛第一题 祝福( DFS+BFS ~)
- POJ 3083 相对位置的DFS的变形和BFS
- PAT--List Components (25)--BFS,DFS经典
- 图的dfs和bfs
- HDU 1254推箱子(bfs+dfs)
- BFS和DFS优先搜索算法
- BFS & DFS的基础学习
- ZZULI-1905 小火山的围棋梦想 【BFS or DFS】
- Graph——bfs,dfs
- 数据结构之图(邻接表存储,DFS和BFS遍历)
- POJ 3083图搜 bfs+dfs
- 图结构练习——BFSDFS——判断可达性
- 复习(数据结构):图:c语言:邻接矩阵DFS和BFS
- 搜索(DFS+BFS)——UVA Live 6455
- Leetcode 133. Clone Graph用BFS、DFS两种解法
- DFS/BFS Codeforces Round #301 (Div. 2) C. Ice Cave
- dfs bfs
- UVA 11882 Biggest Number (搜索+剪枝(dfs+bfs))
- FDU--- (bfs+dfs 未完待补充)