Cod sursa(job #2496879)

Utilizator stef2003Bud Stefan stef2003 Data 21 noiembrie 2019 19:46:59
Problema Ciclu Eulerian Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <cstdio>
#include <fstream>

using namespace std;

int lst[100001], vf[100001];
int sol[500001], urm[500001], nr, tot, m;

struct ura{
  int xx, yy;
  bool taiat;
};

ura v[500001];
int nru=1;

void adauga(int x,int y) {
  nr++;
  vf[nr]=y;
  urm[nr]=lst[x];
  lst[x]=nr;
}

void dfs(int x) {
  int p, y;
  sol[tot++]=x;
  for(p=lst[x];p!=0;p=urm[p]) {
    y=vf[p];
    if(v[y].taiat==0) {
      v[y].taiat=1;
      if(v[y].xx==x)
        dfs(v[y].yy);
      else
        dfs(v[y].xx);
    }
  }
}

int main() {
  FILE *fin, *fout;;
  int n, a, b, dr, p, y, i, x;
  fin=fopen("ciclueuler.in","r");
  fout=fopen("ciclueuler.out","w");
  fscanf(fin, "%d%d",&n,&m);
  for(i=1;i<=m;i++) {
    fscanf(fin, "%d%d",&a,&b);
    v[nru].xx=a;
    v[nru].yy=b;
    v[nru++].taiat=0;
    adauga(a,nru-1);
    adauga(b,nru-1);
  }
  dfs(1);
  for(i=0;i<tot-1;i++)
    fprintf(fout, "%d ",sol[i]);
  fclose( fin );
  fclose( fout );
  return 0;
}