M¹nh D¬ng Biªn So¹n
Bé M«n CÊu Tróc D÷ LiÖu
Gi¶i ThuËt 2012
§ª Sè 23 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/dske23.in.txt");
/*
Thuat toan kiem tra tinh lien thong cua do thi co huong
*/
char S[100][200],x[100];
void NhapDL(int &n)
{
datain>>n;
for(int i=0;i<=n;i++)
datain.getline(S[i],200,'\n');
}
int ket(char S)
{
int k=int (S)-int ('0');
return k;
}
int chuyen(char S[])
{int j=0,k=0;
for(int i=strlen(S)-1;i>=0;i )
{k+=ket(S[i])*pow(10,j);j++;}
return k;
Trang 2void ChuyenKe(int a[][100],int n)
{
int dem=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=0;
for(int i=1;i<=n;i++)
{
int j=0;
while(S[i][j]!='\0')
{
if(S[i][j]>='0'&&S[i][j]<='9') {
char SS[200];
int k=0;
while(S[i][j]>='0'&&S[i][j]<='9') {
SS[k]=S[i][j];
k++;
j++;
} SS[k]='\0';j++;
a[i][chuyen(SS)]=1;
} } }
}
void DFS(int i,int a[][100],int n)
{
x[i]=1;
for(int k=1;k<=n;k++)
if(x[k]==0&&a[i][k]==1)
DFS(k,a,n);
}
int dem=0;
void DFS(int i,int j,int a[][100],int n)
Trang 3x[i]=1;
for(int k=1;k<=n;k++)
if(x[k]==0&&a[i][k]==1)
{
if(k==j){
dem=1;
return ; }
DFS(k,j,a,n);
}
}
int LienTM(int a[][100],int n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(j!=i) {
for(int u=1;u<=n;u++) x[u]=0;
dem=0;
DFS(i,j,a,n);
if(dem==0)return 0; }
}
return 1;
}
int LienTY(int a[][100],int n)
{
for(int u=1;u<=n;u++)x[u]=0; for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(a[i][j]==1)
a[j][i]=1;
DFS(1,a,n);
for(int i=1;i<=n;i++)
if(x[i]==0)return 0;
return 1;
}
Trang 4{
int n;
NhapDL(n);
int a[100][100];
ChuyenKe(a,n);
if(LienTM(a,n)==1)cout<<"Do thi lien thong manh"<<endl;
else if(LienTY(a,n)==1)cout<<"Do thi lien thong yeu"<<endl;
else cout<<"Do thi khong lien thong manh, khong lien thong yeu"<<endl; }