Mai intai trebuie sa te autentifici.
Cod sursa(job #2507143)
Utilizator | Data | 9 decembrie 2019 18:24:35 | |
---|---|---|---|
Problema | Ciclu Eulerian | Scor | 10 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.15 kb |
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector < pair <int, int> > L[101],M;
stack <int> S;
int Viz[101];
int n, m;
void Citire()
{ int i,u,v;
f>>n>>m;
for(i=0;i<=m-1;i++)
{ f>>u>>v;
L[u].push_back(make_pair(v,i));
L[v].push_back(make_pair(u,i));
M.push_back(make_pair(u,v));
}
}
vector <int> Sol;
void Ciclu_Eulerian()
{ int vecin;
S.push(1);
while(!S.empty())
{ int nod=S.top();
if(!L[nod].empty())
{ int poz=L[nod].back().second;
L[nod].pop_back();
if(Viz[poz]==0)
{ Viz[poz]=1;
if(M[poz].first==nod)
vecin=M[poz].second;
else vecin=M[poz].first;
S.push(vecin);
}
}
else { S.pop();
Sol.push_back(nod);
}
}
}
void Afisare()
{ int i;
for(i=0;i<Sol.size()-1;i++)
g<<Sol[i]<<" ";
}
int main()
{
Citire();
Ciclu_Eulerian();
Afisare();
f.close();
g.close();
return 0;
}