Cod sursa(job #2254714)

Utilizator b10nd3Oana Mancu b10nd3 Data 5 octombrie 2018 20:34:10
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<iostream>
#include<fstream>
#include<stack>
#include<vector>
#include<string.h>

using namespace std;

int main(){
	ifstream in("ciclueuler.in");
	ofstream out("ciclueuler.out");
	int n,m,i,x,y,k=0,node;
	in>>n>>m;
	bool viz[m+1];
	vector < pair<int,int> > G[m+1];
	stack <int> st;
	
	memset(viz,0,m+1);
	
	for(i=1;i<=m;i++){
		in>>x>>y;
		G[x].push_back( make_pair(y,i) );
		G[y].push_back( make_pair(x,i) );
	}
	
	for(i=1;i<=n;i++)
	   if(G[x].size()&1){
	      out<<-1;
	      return 0;
	   }
	
	st.push(1);
	while(!st.empty()){
		node=st.top(); 
		while(G[node].size() && viz[G[node].back().second])
		     G[node].pop_back();
	    if(G[node].size()==0){
		    k++;
		    if(k>m) break;
		    out<<node<<" ";
		    st.pop();
		}
		else{
			st.push(G[node].back().first);
			viz[G[node].back().second]=1;
			G[node].pop_back();
		}
	}   
	
	in.close(); out.close();
	return 0;
}