Pagini recente » Cod sursa (job #1854785) | Cod sursa (job #2352) | Cod sursa (job #1421692) | Rating Dogariu Mihai (DogariuMihai) | Cod sursa (job #368232)
Cod sursa(job #368232)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
vector<int> viz;
vector<pair<int,int> > rel[100010];
int rez[500010],vf,N,M,nr;
pair<int,unsigned int> st[500010];
void citire(){
fi>>N>>M;
int x,y;
for (int i=1;i<=M;++i){
fi>>x>>y;
rel[x].push_back(make_pair(y,i-1));
rel[y].push_back(make_pair(x,i-1));
viz.push_back(0);
}
fi.close();
}
void euler(){
vf=1;
st[vf].first=1;
st[vf].second=0;
while (vf){
if (st[vf].second>=rel[st[vf].first].size()){
rez[++nr]=st[vf].first;
--vf;
} else if (viz[rel[st[vf].first][st[vf].second].second]==0){
viz[rel[st[vf].first][st[vf].second].second]=1;
++vf;
st[vf].first=rel[st[vf-1].first][st[vf-1].second].first;
st[vf].second=0;
} else ++st[vf].second;
}
}
int main(){
citire();
nr=0;
euler();
for (int i=2;i<nr;++i) fo<<rez[i]<<" ";
fo<<rez[nr]<<"\n";
fo.close();
return 0;
}