[蓝桥杯][2013年第四届真题]危险系数-dfs+图的遍历
題目描述
問題描述
抗日戰(zhàn)爭時期,冀中平原的地道戰(zhàn)曾發(fā)揮重要作用。
地道的多個站點間有通道連接,形成了龐大的網(wǎng)絡(luò)。但也有隱患,當(dāng)敵人發(fā)現(xiàn)了某個站點后,其它站點間可能因此會失去聯(lián)系。
我們來定義一個危險系數(shù)DF(x,y):
對于兩個站點x和y (x != y), 如果能找到一個站點z,當(dāng)z被敵人破壞后,x和y不連通,那么我們稱z為關(guān)于x,y的關(guān)鍵點。相應(yīng)的,對于任意一對站點x和y,危險系數(shù)DF(x,y)就表示為這兩點之間的關(guān)鍵點個數(shù)。
本題的任務(wù)是:已知網(wǎng)絡(luò)結(jié)構(gòu),求兩站點之間的危險系數(shù)。
輸入
輸入數(shù)據(jù)第一行包含2個整數(shù)n(2 < = n < = 1000), m(0 < = m < = 2000),分別代表站點數(shù),通道數(shù);
接下來m行,每行兩個整數(shù) u,v (1 < = u, v < = n; u != v)代表一條通道;
最后1行,兩個數(shù)u,v,代表詢問兩點之間的危險系數(shù)DF(u, v)。
輸出
一個整數(shù),如果詢問的兩點不連通則輸出-1.
樣例輸入
7 6
1 3
2 3
3 4
3 5
4 5
5 6
1 6
樣例輸出
2
解題思路:
去除某個點c(注意c!=a并且也c!=b),去除之后若a,b之間不存在通路,則說明c是a,b之間必要的點,計數(shù)器加1;
思路參考鏈接:
https://blog.csdn.net/weixin_41988545/article/details/86824844
代碼如下:
#include <iostream> #include <vector> #include <cstring> using namespace std; const int N = 2010; bool vis[N]; vector<int>mp[N]; int s, e; bool flag; int ans;void dfs(int s) {if (s == e) {flag = 0;return ;}for (int i = 0; i < mp[s].size(); i++) {if (!vis[mp[s][i]]) {vis[mp[s][i]] = 1;dfs(mp[s][i]);vis[mp[s][i]] = 0;}} }int main() {int n, m;cin >> n >> m;for (int i = 0; i < m; i++) {int a, b;cin >> a >> b;mp[a].push_back(b);mp[b].push_back(a);}cin >> s >> e;for (int i = 1; i <= n; i++) {memset(vis, 0, sizeof(vis));flag = 1;vis[i] = 1;for (int j = 0; j < mp[s].size(); j++) {vis[mp[s][j]] = 1;dfs(mp[s][j]);vis[mp[s][j]] = 0;}if (flag)ans++;}cout << ans << endl;return 0; }總結(jié)
以上是生活随笔為你收集整理的[蓝桥杯][2013年第四届真题]危险系数-dfs+图的遍历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么下载在别的网站上用的js特效(怎么下
- 下一篇: [蓝桥杯][2013年第四届真题]核桃的