Cod sursa(job #2575434)

Utilizator rd211Dinucu David rd211 Data 6 martie 2020 13:31:19
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 100005;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");


int n, m;
vector<pair<int, bool>> graf[NMAX];
vector<int> raspuns;
void dfs(int node)
{
    for(int i = 0;i<graf[node].size();i++)
    {
        if(graf[node][i].second){
            graf[node][i].second=false;
            for(int j = 0;j< graf[graf[node][i].first].size();j++)
            {
                if(graf[graf[node][i].first][j].first==node && graf[graf[node][i].first][j].second){
                    graf[graf[node][i].first][j].second = false;
                    break;
                }
            }
            dfs(graf[node][i].first);
        }
    }
    raspuns.push_back(node);
    fout<<node<<' ';
}
int main()
{
    fin>>n>>m;
    while(m--)
    {
        int a, b;
        fin>>a>>b;
        graf[a].push_back({b,true});
        graf[b].push_back({a,true});
    }
    for(int i = 1;i<=n;i++){
        if(graf[i].size()%2)
        {
            fout<<-1;
            return 0;
        }
    }
    dfs(1);
    for(int i = 0;i<raspuns.size()-1;i++)
        fout<<raspuns[i]<<" ";
    return 0;
}