啥是欧拉路(欧拉回路)??
如果给定无孤立结点图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;
}