M¹nh D¬ng Biªn So¹n
Bé M«n CÊu Tróc D÷ LiÖu
Gi¶i ThuËt 2012
§ª Sè 14 Trong Bé §Ò ¤n TËp
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
#include<math.h>
ifstream Tepvao("C:/cau truc du lieu/dethi/dothi14.in.txt");
int n,a[100][100],x[100];
/*
Chu Trinh Euler Do Thi Vo Huong
Nua Euler
*/
void NhapDL(int &n)
{
Tepvao>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
Tepvao>>a[i][j];
}
void DFS(int i)
{
x[i]=1;
for(int j=1;j<=n;j++)
if(x[j]==0&&a[i][j]==1)DFS(j);
}
int LienThong()
{
DFS(1);
for(int i=1;i<=n;i++)
if(x[i]==0)return 0;
return 1;
}
int Bac()
{
int deg,i,j,dem=0,l;
for(i=1;i<=n;i++)
{
deg=0;
for(int j=1;j<=n;j++)
Trang 2if(deg%2){dem++;l=i;} }
if(dem>2) return 0;
return l;
}
void CTNuaEuler(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; a[i][h]=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 ce[100];
Trang 3if(LienThong()==0||Bac()==0)
cout<<"G khong la do thi Euler"<<endl; else CTNuaEuler(ce);
}