Pagini recente » Cod sursa (job #1195162) | Cod sursa (job #1915702) | Cod sursa (job #1075219) | Cod sursa (job #296791) | Cod sursa (job #1758538)
#include <fstream>
#include <vector>
#include <algorithm>
#define NMAX 100100
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m,me,viz[NMAX],t[NMAX];
vector<int> G[NMAX];
vector<int> ciclu,cicluEULERIAN;
int stop;
void citire(){
int i,x,y;
f>>n>>m;
for(i=1;i<=m;i++){
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void afisare(int nod){
if(t[nod]){
g<<nod<<' ';
afisare(t[nod]);
}
}
int find_cycle(int x){
int T=0,z;
int y=x;//nod curent
while(T==0||y!=x){
T++;
ciclu.push_back(y);
z=G[y][0];
G[y].erase(G[y].begin());
vector<int>::iterator p;
p=find(G[z].begin(),G[z].end(),y);
G[z].erase(p);
y=z;
}
ciclu.push_back(x);
return T;
}
int main(){
citire();
me=find_cycle(1);
int i,j;
for(i=0;i<ciclu.size();i++){
cicluEULERIAN.push_back(ciclu[i]);
}
while(me<m){
int aux,tmp;
for(i=ciclu.size()-1;i>=0;i--){
if(G[ciclu[i]].size()>0){
aux=ciclu[i];
break;
}
}
ciclu.clear();
tmp=find_cycle(aux);
vector<int>::iterator p;
p=find(cicluEULERIAN.begin(),cicluEULERIAN.end(),aux);
cicluEULERIAN.insert(p,ciclu.begin(),ciclu.end()-1);
me+=tmp;
}
for(i=0;i<cicluEULERIAN.size()-1;i++)
g<<cicluEULERIAN[i]<<' ';
return 0;
}