Cod sursa(job #1135016)

Utilizator Laakeriebin ebin Laakeri Data 7 martie 2014 10:45:21
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <vector>

using namespace std;

int used[500001];

struct v{
	int no;
	int id;
};

vector<int> va[100001];

vector<v> g[100001];

int ff=0;
int m;

void lue(int a){
	for (int i=0;i<va[a].size();i++){
		int x=va[a][i];
		ff++;
		if (ff<m) cout <<x<<" ";
		if (va[x].size()>0&&x!=a){
			for (int i=0;i<va[x].size();i++){
				if (va[x][i]!=a) lue(va[x][i]);
			}
		}
	}
}

int main(){
	freopen ("ciclueuler.in","r",stdin);
	freopen ("ciclueuler.out","w",stdout);
	int n;
	cin>>n>>m;
	for (int i=0;i<m;i++){
		int a,b;
		cin>>a>>b;
		v ve;
		ve.no=b;
		ve.id=i+1;
		g[a].push_back(ve);
		ve.no=a;
		ve.id=i+1;
		g[b].push_back(ve);
	}
	int an=1;
	int nn=1;
	int fo=0;
	while (fo<m){
		int f=1;
		while (f){
			f=0;
			for (int i=0;i<g[nn].size();i++){
				v ve=g[nn][i];
				if (!used[ve.id]){
					nn=ve.no;
					f=1;
					fo++;
					va[an].push_back(nn);
					//cout <<an<<" "<<nn<<endl;
					used[ve.id]=1;
					break;
				}
			}
		}
		if (fo<m){
			for (int i=0;i<va[an].size();i++){
				int nt=va[an][i];
				for (int ii=0;ii<g[nt].size();ii++){
					v ve=g[nt][ii];
					if (!used[ve.id]){
						f=1;
						an=nt;
						nn=nt;
						break;
					}
				}
				if (f){
					break;
				}
			}
		}
	}
	cout <<1<<" ";
	lue(1);
	cout <<endl;
}