啥是歐拉路(歐拉回路)??
如果給定無孤立結點圖G,若存在一條路,經過圖中每邊一次且僅一次,這條路稱爲歐拉路;
如果給定無孤立結點圖G,若存在一條迴路,經過圖中每邊一次且僅一次,那麼該回路稱爲歐拉回路。
存在歐拉回路的圖,稱爲歐拉圖。
歐拉路(歐拉回路)有啥用??
一筆畫問題 即尋找歐拉路或歐拉回路
裸的模板題 騎馬修柵欄,很裸很裸很裸
歐拉路(歐拉回路)怎麼寫??
如果尋找歐拉回路,對任意一個點進行dfs,尋找歐拉路,則對一個度爲 1 的點進行dfs,時間複雜度爲O(m+n),m爲邊數,n爲點數
#include <bits/stdc++.h>
using namespace std;
int n,m,pic[1100][1100],d[1100],road[1500],now;
void dfs(int x)
{
for(int i=1;i<=500;i++)
if(pic[x][i])
{
pic[x][i]--; //注意可能有重邊
pic[i][x]--;
dfs(i);
}
road[++now]=x; //記錄路徑
}
int main()
{
cin>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
pic[x][y]++;
pic[y][x]++;
d[x]++;
d[y]++;
}
int st=1; //如果無度爲1的點,則從任意點開始搜,即尋找歐拉回路
for(int i=1;i<=500;i++) //如果有度爲1的點,則從該點開始搜,即尋找歐拉路
if(d[i]%2)
{
st=i;
break;
}
dfs(st);
for(int i=now;i>=1;i--)
{
cout<<road[i]<<endl;
}
return 0;
}