C++ 解决经典哥尼斯堡七桥问题
生活随笔
收集整理的這篇文章主要介紹了
C++ 解决经典哥尼斯堡七桥问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
7-32?哥尼斯堡的“七橋問題”?(25?point(s))
哥尼斯堡是位于普累格河上的一座城市,它包含兩個島嶼及連接它們的七座橋,如下圖所示。
可否走過這樣的七座橋,而且每橋只走過一次?瑞士數(shù)學家歐拉(Leonhard Euler,1707—1783)最終解決了這個問題,并由此創(chuàng)立了拓撲學。
這個問題如今可以描述為判斷歐拉回路是否存在的問題。歐拉回路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條回路。現(xiàn)給定一個無向圖,問是否存在歐拉回路?
輸入格式:
輸入第一行給出兩個正整數(shù),分別是節(jié)點數(shù)N?(1≤N≤1000)和邊數(shù)M;隨后的M行對應M條邊,每行給出一對正整數(shù),分別是該條邊直接連通的兩個節(jié)點的編號(節(jié)點從1到N編號)。
輸出格式:
若歐拉回路存在則輸出1,否則輸出0。
輸入樣例1:
6 10 1 2 2 3 3 1 4 5 5 6 6 4 1 4 1 6 3 4 3 6輸出樣例1:
1輸入樣例2:
5 8 1 2 1 3 2 3 2 4 2 5 5 3 5 4 3 4輸出樣例2:
0?
歐拉回路是遍歷圖中的所有邊。?
給定一個圖存在歐拉回路的充要條件是圖為一個連通圖,且每個點的度數(shù)(發(fā)出的邊為偶數(shù))
判斷一個圖為連通圖可以用DFS的方法判斷,也可以用并查集來判斷。這里給一個代碼
#include <iostream> class UnionFind { private:int* parent;int count;int* rank; // rank[i]表示以i為根集合的層數(shù) public:UnionFind(int count_) {parent = new int[count_];rank = new int[count_];this->count = count_;for (int i = 0; i < count_; i++) {parent[i] = i;rank[i] = 1;}}~UnionFind() {delete[] parent;delete[] rank;}int find(int p) {//assert(p >= 0 && p < count);while (p != parent[p]) {parent[p] = parent[parent[p]];p = parent[p];}return p;}bool isConnected(int p, int q) {return find(p) == find(q);}void unionElements(int p, int q) {int pRoot = find(p);int qRoot = find(q);if (pRoot == qRoot)return;if (rank[pRoot] < rank[qRoot])parent[pRoot] = qRoot;else if (rank[qRoot] < rank[pRoot])parent[qRoot] = pRoot;else {parent[pRoot] = qRoot;rank[qRoot]++;}count--;}int size() {return count;}};bool HasEulerCircuit(UnionFind & Union, int degree[], int V) {if (Union.size()-1!= 1)return false;for (int i = 0; i < V; i++) {if (degree[i] % 2)return false;}return true; }int main() {int V, E, V1, V2;int degree[1010] = { 0 };std::cin >> V >> E;UnionFind Union = UnionFind(V+1);for (int i = 0; i < E; i++) {std::cin >> V1 >> V2;Union.unionElements(V1, V2);degree[V1]++;degree[V2]++;}if (HasEulerCircuit(Union, degree, V))std::cout << 1 << std::endl;elsestd::cout << 0 << std::endl; }?
總結
以上是生活随笔為你收集整理的C++ 解决经典哥尼斯堡七桥问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一款适用甲方企业的外网资产周期性扫描监控
- 下一篇: VS code + miktex + 内