Pagini recente » Cod sursa (job #934157) | Cod sursa (job #2711917) | Cod sursa (job #2196193) | Cod sursa (job #18668) | Cod sursa (job #1226145)
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
const int N=100000;
vector<int>g[N+1];
queue<int>q;
stack<int>st;
int degree[N+1];
bool vis[N+1],f=true;
FILE*in,*out;
void bfs(int node){
q.push(node);
vis[1]=true;
while(!q.empty()){
int dad=q.front();
for(int i=0;i<g[dad].size();i++){
int son=g[dad][i];
if(!vis[son]){
vis[son]=true;
q.push(son);
}
}
q.pop();
}
}
void eulerCycle(int node){
st.push(node);
while(!st.empty()){
node=st.top();
int son=g[node][0];
bool ff=g[node].size()>0;
if(ff){
g[node].erase(g[node].begin());
for(int j=0;j<g[son].size();j++)
if(g[son][j]==node){
g[son].erase(g[son].begin()+j);
break;
}
st.push(son);
continue;
}
if(f)
f=false;
else
fprintf(out,"%d ",node);
st.pop();
}
}
int main(){
int i,n,m;
in=fopen("ciclueuler.in","r");
out=fopen("ciclueuler.out","w");
fscanf(in,"%d%d",&n,&m);
for(i=1;i<=m;i++){
int v1,v2;
fscanf(in,"%d%d",&v1,&v2);
g[v1].push_back(v2);
g[v2].push_back(v1);
degree[v1]++;
degree[v2]++;
}
bfs(1);
for(i=1;i<=n;i++)
if(degree[i]%2==1||vis[i]==false){
fprintf(out,"-1");
return 0;
}
eulerCycle(1);
return 0;
}