Fleury算法求欧拉路径

注意是有向图

vector存图

#include//图联通  并且有2个或者没有奇数度节点,没有的是欧拉回路
#include
#include
#include
#include
#include
using namespace std;
const int maxn=1e6+10;
struct Edge
{
    int from,to;
}z;
vector w;
vector s[maxn];
int path[maxn],cont,vis[maxn];
void add_edge(int from,int to)
{
    z.from=from;
    z.to=to;
    w.push_back(z);
    int m=w.size()-1;
    s[from].push_back(m);
    s[to].push_back(m);
}
int dfs(int x)
{
    for(int i=0; i=1;i--)
            printf("%d%c",path[i],i==1?'\n':' ');
    }
}

 
   

临接矩阵存图

#include//图联通  并且有2个或者没有奇数度节点,没有的是欧拉回路
#include
#include
#include
#include
#include
using namespace std;
const int maxn=1e6+10;
int path[maxn],cont;
int x[1010][1010],n;
void dfs(int s)
{
    for(int i=1;i<=n;i++)
    {
        if(x[s][i]>0)
        {
            x[s][i]--;
            x[i][s]--;
            dfs(i);
        }
    }
    path[++cont]=s;
}
int sum[maxn];
int main()
{
    int m;
    while(~scanf("%d%d",&n,&m))
    {
        memset(sum,0,sizeof(sum));
        memset(x,0,sizeof(x));
        for(int i=0;i=1;i--)
            printf("%d%c",path[i],i==1?'\n':' ');
    }
}


你可能感兴趣的:(存模板,图论)