M¹nh D¬ng Biªn So¹n
Bé M«n CÊu Tróc D÷ LiÖu
Gi¶i ThuËt 2012
§ª Sè 13 Trong Bé §Ò ¤n TËp
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
ifstream datain("C:/cau truc du lieu/dethi/dothi13.in.txt");
/*
Kiem tra mot do thi co phai Nua Euler khong
phai thi in ra duong di nao do
De la do thi nua euler
thi do thi la Lien thong Yeu
Moi V thuoc G co bac vao chenh lech bac ra la 1 don vi khong vuot qua 2
*/
int a[100][100],n,x[100];
void DFS(int i)
{
x[i]=1;
for(int j=1;j<=n;j++)
if(a[i][j]==1&&x[j]==0)DFS(j);
}
int Bac()
{
int deg,i,j,dem=0,l;
for(i=1;i<=n;i++)
{
deg=0;
for(int j=1;j<=n;j++)
deg+=a[i][j];
if(deg%2){dem++;l=i;}
}
}
int LienThong()
{
for(int i=1;i<=n;i++)
x[i]=0;
DFS(1);
for(int i=1;i<=n;i++)
if(x[i]==0)return 0;
return 1;
Trang 2void NhapDL(int &n)
{
datain>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
datain>>a[i][j];
}
void NuaEuler(int aa[][100],int ce[]) {
int l;
for(l=1;l<=n;l++)
{
int deg=0;
for(int i=1;i<=n;i++) if(deg+=a[i][l]);
if(deg%2)break;
}
int st[100*100],i,j,h,k,t;
t=1;
st[t]=l;
k=0;
while(t>0)
{
h=st[t];
j=0;
for(i=1;i<=n;i++) if(a[h][i]==1) {
t++;
st[t]=i;
j=i;
a[h][i]=0;
break;
} if(j==0) {
k++;
ce[k]=h;
t ;
} }
for(i=k;i>1;i )
cout<<ce[i]<<" - ";
cout<<ce[1]<<endl;
}
main()
{
int d[100];
NhapDL(n);
Trang 3cout<<"Khong Ton Tai Duong di Euler"<<endl; else {NuaEuler(a,d);}
}