Cod sursa(job #3259261)

Utilizator Laura139Anghel Laura Laura139 Data 25 noiembrie 2024 16:52:56
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");

struct muchie{
    int a, b;
    bool del=0;
}edge[500005];

vector <int> matad[100005];

vector <int> rez;

int urmatoareaMuchie(int node)
{
    while(matad[node].size()!=0 && edge[matad[node].back()].del==1)
        matad[node].pop_back();
    if(matad[node].size()!=0)
    {
        edge[matad[node].back()].del=1;
        int newNode=0;
        if(edge[matad[node].back()].b!=node)
            newNode=edge[matad[node].back()].b;
        else
            newNode=edge[matad[node].back()].a;
        return newNode;
    }
    return 0;
}

void Euler(int node)
{
    while(int vec=urmatoareaMuchie(node))
        Euler(vec);
    rez.push_back(node);
}

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int a,b;
        cin>>a>>b;
        matad[a].push_back(i);
        matad[b].push_back(i);
        edge[i].a=a;
        edge[i].b=b;
    }
    Euler(1);
    for(int i=0;i<rez.size()-1;i++)
        cout<<rez[i]<<'\n';
    /*for(int i=1;i<=n;i++)
    {
        for(int j=0;j<matad[i].size();j++)
            cout<<matad[i][j]<<" ";
        cout<<'\n';
    }*/
    return 0;
}