首先簡單講一下思想 首先先判斷這個無向圖存在尤拉路徑(其實尤拉迴路也很容易判)
把每個點連線的邊數存下來 如果只有兩個或者沒有點有奇數條邊與它相連 那麼就存在尤拉路徑
然後從乙個奇數點開始(如果沒有奇數點就任意乙個點)隨便選乙個點開始進行深搜 把經過的每乙個點存到棧裡面 把經過的邊刪掉
然後在棧裡面的點如果還有邊與它相連 又繼續深搜 否則就把這個點彈出去 輸出
這樣時間複雜度為 o(m)
用矩陣存的 比較low不要罵我。。。(反正尤拉迴路也是水題……)
**如下
#include#include#include#include#include#includeusing namespace std;
stackst;
int mp[110][110],n,m;//n為點數 m為邊數
int num[110],sum,start;
void dfs(int x)
} return;
}void fleury(int x)
if(flag)
else
}return;
}int main()
start=x;
for(int i=0;i<=n;i++)
if(num[i]&1)
if(sum==0||sum==2)fleury(start);
else printf("no solution\n");
} return 0;
}
尤拉路徑 尤拉迴路
尤拉迴路 連通圖,一條路徑恰好經過所有邊一次,並且構成迴路 起點終點相同 尤拉路徑 連通圖,一條路徑恰好經過所有邊一次 起點終點不必相同 具有尤拉迴路的圖稱尤拉圖,具有尤拉路徑但不具有尤拉迴路的圖稱半尤拉圖 無向圖尤拉迴路的判斷 連通圖,所有頂點度數均為偶數 無向圖尤拉路徑的判斷 連通圖,只有兩頂點...
尤拉迴路 尤拉路徑
尤拉路徑 如果圖 g 種的一條路徑包括所有的邊,且僅通過一次的路徑.尤拉迴路 能回到起點的尤拉路徑.混合圖 既有無向邊又有無向邊的圖.hierholzer演算法自動尋找尤拉迴路,在找不到尤拉迴路的情況下會找到尤拉路徑。前提是得給它指定好起點。演算法流程 無向圖 1.判斷奇點數。奇點數若為0則任意指定...
求尤拉函式
3.尤拉函式 對正整數n,尤拉函式是少於或等於n的數中與n互質的數的數目 顯然對素數n,phi n n 1 通式 x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為x的所有質因數,x是不為0的整數。1 1 唯一和1互質的數就是1本身 很簡單,就不寫 ...