Cod sursa(job #2343171)

Utilizator btudorBazac Tudor btudor Data 13 februarie 2019 18:54:11
Problema Ciclu Eulerian Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");

vector <int> g[100005];

stack <int> st;

int viz[100005],mu[100005];

void dfs(int u)
{
  int v,i;
  viz[u]=1;
  for(i=0;i<g[u].size();i++)
  {
    v=g[u][i];
    if(viz[v]==0)
      dfs(v);
  }
}

void euler(int n)
{
  int o;
  while(!g[n].empty())
  {
    st.push(n);
    o=g[n].back();
    g[n].pop_back();
    g[o].erase(find(g[o].begin(),g[o].end(),n));
    n=o;
  }
}

int main()
{
  int n,c=1,i,x,y,m,p=1,no;
  in>>n>>m;
  for(i=1;i<=m;i++)
  {
    in>>x>>y;
    g[x].push_back(y);
    g[y].push_back(x);
    mu[x]++;
    mu[y]++;
  }
  dfs(1);
  for(i=1;i<=n;i++)
  {
    if(viz[i]==0)
    {
      c=0;
      break;
    }
    if(mu[i]%2==1)
    {
      p=0;
      break;
    }
  }
  if(c==0 || p==0)
    out<<"GRAFUL NU E Eulerian!";
  else
  {
    no=1;
    do
    {
      euler(no);
      no=st.top();
      out<<no<<" ";
      st.pop();
    }while(!st.empty());
  }
  return 0;
}