【模板】 欧拉路 欧拉回路

啥是欧拉路(欧拉回路)??

如果给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,这条路称为欧拉路;
如果给定无孤立结点图G,若存在一条回路,经过图中每边一次且仅一次,那么该回路称为欧拉回路。
存在欧拉回路的图,称为欧拉图。

欧拉路(欧拉回路)有啥用??

一笔画问题 即寻找欧拉路或欧拉回路
裸的模板题 骑马修栅栏,很裸很裸很裸

欧拉路(欧拉回路)怎么写??

如果寻找欧拉回路,对任意一个点进行dfs,寻找欧拉路,则对一个度为 1 的点进行dfs,时间复杂度为O(m+n),m为边数,n为点数

#include 
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<return 0;
}

你可能感兴趣的:(C++编程,模板,黑恶势力)