Tải bản đầy đủ (.doc) (4 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 (31)

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 (18.93 KB, 4 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è 30 C¸ch 2
Trong Bé §Ò ¤n TËp
#include<iostream.h>
#include<fstream.h>
#include<math.h>
#include<conio.h>
#include<time.h>
#include<string.h>
#include<stdio.h>
ifstream datain("C:/cau truc du lieu/dethi/data30.in.txt");
ofstream dataout("C:/cau truc du lieu/dethi/ketqua30e.out.txt");
/*
Tao Nut Giao Thong Ung Y Va Hanh Phuc Nhat
*/
int a[100][100],n,dem=0,aa[100],bb[100],x[100],dem1;
void NhapDL(int &n)
{
datain>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
datain>>a[i][j];
for(int i=1;i<=n;i++)
{
int k=0;
for(int j=1;j<=n;j++)
if(a[i][j]==1)
{
if(j>i)


{dem++;
aa[dem]=i;
bb[dem]=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()
{
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 DFS(int i,int j,int ax[][100])
{
x[i]=1;
for(int k=1;k<=n;k++)
if(ax[i][k]==1&&x[k]==0){
if(k==j)
{
dem1=1;
return ;

}
DFS(j,k,a);
}
}
int KT(int ax[][100],int n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j){
dem1=0;
for(int k=1;k<=n;k++)
x[k]=0;
DFS(i,j,ax);
if(dem1==0)return 0;
}
return 1;
}
int ThucHien(int ax[][100])
{
for(int i=0;i<=pow(2,dem)-1;i++)
{int xx[100];
int min=0;
int j=i;
while(i>0)
{
min++;
xx[min]=i%2;
i=i/2;
}
i=j;

for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
ax[j][k]=0;
for(int k=1;k<=dem;k++)
if(xx[k]==0)
ax[aa[k]][bb[k]]=1;
else ax[bb[k]][aa[k]]=1;
if(KT(ax,n)==1)return 1;
}
return 0;
}
main()
{
NhapDL(n);
cout<<dem<<endl;
if(LienThong()==0)dataout<<"Vo Nghiem"<<endl;
else
{
int ax[100][100];
if(ThucHien(ax)==1)
{
dataout<<dem<<endl;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(ax[i][j]==1){dataout<<i<<"
"<<j<<endl;cout<<i<<" "<<j<<endl;}
}
else dataout<<"Vo Nghiem"<<endl;
}
}

×