POJ 2230 欧拉回路

xg

测板子

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
#include <iomanip>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <vector> 
#define bug cout<<"--------------"<<endl
#define sp ' '
using namespace std;
typedef long long ll;

const int maxn = 1e4+10;
const int maxm = 1e5+10;
int tot = 0;
int head[maxm],ver[maxm],edge[maxm],nextt[maxm];
void add(int x,int y)
{
    ver[++tot] = y,nextt[tot] = head[x] , head[x] = tot;
}
int sta[1000010],ans[1000010],vis[1000010];
int n,m,top,t;
void euler()
{
    sta[++top] = 1;
    while(top > 0)
    {
        int x = sta[top], i = head[x];
        //while(i && vis[i])    i = Next[i];    //找到一条尚未访问过的边
        if(i)
        {
            sta[++top] = ver[i];
            //vis[i] = vis[i ^ 1] = true;
            head[x] = nextt[i];
        }else{          //x连接的所有边都已经访问过了,回溯,级在答案栈中
            top--;
            ans[++t] = x;
        }
    }
}
int main()
{
    //freopen("input.txt", "r", stdin);
    scanf("%d%d", &n, &m);
    tot = 1;
    int x, y;
    for(int i = 0; i < m; ++i)
    {
        scanf("%d%d", &x, &y);
        add(x, y);
        add(y, x);
    }
    euler();
    for(int i = t; i; --i)
    {
        printf("%d\n", ans[i]);
    }
    return 0;
}

 

posted @ 2020-08-22 15:50  阿斯水生产线  阅读(104)  评论(0编辑  收藏  举报