Cod sursa(job #2572252)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 5 martie 2020 12:17:46
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <vector>

#define N 100001

using namespace std;

ifstream f ( "ciclueuler.in" );
ofstream g ( "ciclueuler.out" );

vector < pair < int, int > > graph[N];
int start[N], cicle[N], euler[N], n, m, x, y, k, p, i, gr[N];
bool viz[N];

int main()
{   f >> n >> m;
    for ( i = 1; i <= m; i++ ){
        f >> x >> y;
        graph[x].push_back ( { y, i } );
        graph[y].push_back ( { x, i } );
        gr[x]++, gr[y]++;
    }
    cicle[k = 1] = 1;
    while ( k != 0 ){
        while ( gr[cicle[k]] == 0 && k > 0 ){
            euler[++p] = cicle[k];;
            k--;
            continue;
        }
        int node = cicle[k];
        while ( start[node] < graph[node].size ( ) ){
            int new_node = graph[node][start[node]].first;
            int arc_num = graph[node][start[node]].second;
            if ( viz[arc_num] == 0 ){
                cicle[++k] = new_node;
                viz[arc_num] = 1;
                gr[node]--, gr[new_node]--;
                break;
            }
            start[node]++;
        }
    }
    for ( i = 1; i <= p; i++ )
        g << euler[i] << ' ';
    return 0;
}