Tải bản đầy đủ (.doc) (3 trang)

ĐỀ THI MÔN Cấu Trúc Dữ Liệu và Giải Thuật học viện công nghệ bưu chính viễn thông (13)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (17.59 KB, 3 trang )

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;
}
void 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);
if(LienThong()==0||Bac()==0)
cout<<"Khong Ton Tai Duong di Euler"<<endl;
else {NuaEuler(a,d);}
}

×