Cod sursa(job #1326013)

Utilizator Bursucelthe coppice Bursucel Data 24 ianuarie 2015 16:48:21
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb

  

 Ian 18 la 3:40 PM  







#include<iostream>
#include<fstream>
using namespace std;
ifstream f("montan.in");
class grupa5
{ public:
 int n,i,j,ind,sf,a[51][51],eul[51],viz[51];
 void citire();
 int grade_pare(int a[51][51],int n)
 { int pare=1,grad;
  for(i=1;i<=n;i++)
  { grad=0;
   for(j=1;j<=n;j++)
    if(a[i][j])grad++;
    if(grad%2)pare=0;
  }
  return pare;
 }
 void exploateaza(int ind);
 void df(int nod);
 int conex(int a[51][51],int n)
 { int conex;
  df(1);
  conex=1;
  for(int i=1;i<=n && conex;i++)
   if(!viz[i])
  conex=0;
  if(conex)return 1;
  else return 0;
 }
 void afis();
};
 void grupa5::citire()
 { f>>n;
  for(int i=1;i<=n;i++)
   for(int j=1;j<=n;j++)f>>a[i][j]; 
  f.close();
 }
 void grupa5::exploateaza(int ind)
 { for(int i=1;i<=n;i++)
   if(a[eul[ind]][i])
  { a[eul[ind]][i]=0;
   a[i][eul[ind]]=0;
   sf++;
   for(j=sf;j>ind;j--)
    eul[j]=eul[j-1];
    ind++;
    eul[ind]=i;
    exploateaza(ind);
  }
 }
 void grupa5::df(int nod)
 { viz[nod]=1;
  for(int i=1;i<=n;i++)
   if(a[nod][i] && !viz[i])
  df(i);
 }
 void grupa5::afis()
 { if(!(grade_pare(a,n) && conex(a,n))) cout<<"Graf Neeulerian";
   else cout<<"Este un ciclu Eulerian:";
  eul[1]=1; sf=1; ind=1;
  for(i=1;i<=sf;i++) exploateaza(i);
  for(i=1;i<=sf;i++) cout<<eul[i]<<" ";
 }
int main()
{ grupa5 turist;
 turist.citire();
 turist.afis();
 cout<<'\n';
 for(int j=1;j<=n;j++) cout<<a[1][j]<<" ";
 return 0;
}