Pagini recente » Cod sursa (job #618401) | Cod sursa (job #1397342) | Cod sursa (job #2922719) | Cod sursa (job #660277) | Cod sursa (job #1363256)
#include <stdio.h>
#include <vector>
using namespace std;
FILE *f=fopen("ciclueuler.in","r");
FILE *g=fopen("ciclueuler.out","w");
struct cp{
int x;
int ind;
};
vector <cp> aa[102005],b[102005];
cp aux;
vector <int> c;
int uz[102005],use[102005],m,n,i,x,y,ok,j,bbb,tt,cont;
vector <int>::iterator jj;
void dfleury(int k){
vector <cp>::iterator it;
//vector <cp>aux1;
int ct=0;
//aux1.clear();
if (b[k].size()!=0){
for(it=b[k].begin();it!=b[k].end();++it){
//aux1.push_back(*it);
if (uz[(*it).ind]==1){c.push_back((*it).x);uz[(*it).ind]=0;dfleury((*it).x);return;}
ct++;
}
}
for(it=aa[k].begin();it!=aa[k].end();++it){
//aux1.push_back(*it);
if (uz[(*it).ind]==1){c.push_back((*it).x);uz[(*it).ind]=0;dfleury((*it).x);}
ct++;
}
}
void dfs(int k,int val){
vector <cp>::iterator it;
//vector <cp>aux1;
cp AUX;
int ct=0;
use[k]=1;
if (val>=0)uz[val]=1;
//aux1.clear();
if (k>30002)return;
for(it=aa[k].begin();it!=aa[k].end();++it){
//aux1.push_back(*it);
if (use[(*it).x]==0)dfs((*it).x,(*it).ind);
else if(uz[(*it).ind]==0) {
AUX.x=(*it).x;
AUX.ind=(*it).ind;
b[k].push_back(AUX);
AUX.x=k;
b[(*it).x].push_back(AUX);
uz[(*it).ind]=1;
}
ct++;
}
}
int main()
{
fscanf(f,"%d%d",&n,&m);
cont=1;
for(i=1;i<=m;i++){
fscanf(f,"%d%d",&x,&y);
aux.x=y;
aux.ind=cont;
aa[x].push_back(aux);
aux.x=x;
aa[y].push_back(aux);
cont++;
}
for(i=2;i<=n;i++)
if (aa[i].size()%2==1){ok=1;break;}
if (ok==1)(fprintf(g,"%d",-1));
else {
dfs(1,-99);
c.push_back(1);
dfleury(1);
for(jj=c.begin();jj!=c.end();++jj)
fprintf(g,"%d ",*jj);
}
fclose(g);
return 0;
}