Cod sursa(job #1612150)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 24 februarie 2016 18:49:17
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include <list>
#include <stack>
#define pp pair <int,int>
#define w 100000
using namespace std;
vector <pp> a[w+1];
bool viz[5*w+1];
list <int> l;
stack <int> st;
void euler(int x)
{
    int i,y,m,ok=1,okk;
    while (ok)
    {
        ok=0;okk=1;
        for (i=0;i<a[x].size()&&okk;i++)
        {
            y=a[x][i].first;
            m=a[x][i].second;
            if (!viz[m])
            {
                ok=1;
                viz[m]=1;
                st.push(x);
                x=y;okk=0;
            }
        }
    }
}
int main()
{
    ifstream f("ciclueuler.in");
    ofstream g("ciclueuler.out");
    int n,i,x,y,m;
    f>>n>>m;
    for (i=1;i<=m;i++)
    {
        f>>x>>y;
        a[x].push_back(make_pair(y,i));
        a[y].push_back(make_pair(x,i));
    }
    euler(1);
    while (!st.empty())
    {
        x=st.top();st.pop();
        l.push_front(x);
        euler(x);
    }
    typeof (l.begin()) it;
    for (it=l.begin();it!=l.end();it++)
        g<<*it<<' ';
    g<<'\n';
    f.close();
    g.close();
    return 0;
}