Pagini recente » Cod sursa (job #2089147) | Cod sursa (job #376621) | Cod sursa (job #2935533) | Cod sursa (job #301830) | Cod sursa (job #928197)
Cod sursa(job #928197)
#include<stdio.h>
#include<vector>
using namespace std;
FILE *f = fopen("ciclueuler.in","r");
FILE *g = fopen("ciclueuler.out","w");
#define MaxN 100100
#define MaxM 500100
int N,M;
vector<pair<int,int> > A[MaxN];
int SolV[MaxM];
int viz[MaxM],St[MaxM],StPoz[MaxM];
void citire(void)
{
int a,b;
fscanf(f,"%d %d",&N,&M);
for(int i=1;i<=M;i++)
{
fscanf(f,"%d %d",&a,&b);
A[a].push_back(make_pair(b,i));
A[b].push_back(make_pair(a,i));
}
}
void euler(void)
{
int k = 1;
St[k] = 1;
StPoz[k] = 0;
for(;k;StPoz[k]++)
{
if(StPoz[k] < A[St[k]].size())
{
if(!viz[A[St[k]][StPoz[k]].second])
{
viz[A[St[k]][StPoz[k]].second] = 1;
St[k+1] = A[St[k]][StPoz[k]].first;
StPoz[++k] = -1;
}
}
else
{
//printf("%d ",St[k]);
SolV[++SolV[0]] = St[k--];
}
}
}
int main()
{
citire();
euler();
if(SolV[0] == M && SolV[1] == SolV[M+1])
for(int i=1;i<SolV[0];i++)
fprintf(g,"%d ",SolV[i]);
else
fprintf(g,"-1\n");
}