Cod sursa(job #2492800)

Utilizator stef2003Bud Stefan stef2003 Data 15 noiembrie 2019 12:17:34
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <cstdio>

using namespace std;

int q[100001], lst[100001], vf[100001];
int d[500001], urm[500001], nr;

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

ura v[500001];
int nru;

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

int main() {
  FILE *fin, *fout;
  int n, m, a, b, st, dr, p, y, i, x, indice;
  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,b);
    adauga(b,a);

  }
  dr=0;
  q[dr]=1;
  while(dr>=0) {
    x=q[dr];
    dr--;
    fprintf(fout, "%d ",x);
    for(p=lst[x];p!=0;p=urm[p]) {
      y=vf[p];
      for(i=0;i<nru;i++)
        if((x==v[i].xx && y==v[i].yy) || (y==v[i].xx && x==v[i].yy)) {
          if(v[i].taiat==0) {
            v[i].taiat=1;
            q[++dr]=y;
          }
          i=nru;
        }
    }
  }
  fclose( fin );
  fclose( fout );
  return 0;
}