//Bai 1 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20];
FILE *f;
void ReadData(void){
int i,j,k=0;char *s,*s1;
f=fopen("dothi.in","r");
fgets(s,255,f);
n=atoi(s);
for (i=1;i<=n;i++) {
for (j=1;j<=n;j++) a[i][j]=0;
chuaxet[i]=1;}
for (i=1;i<=n;i++){
fgets(s,255,f);
for (j=0;j<=strlen(s);j++)
if (s[j]==' ' || s[j]=='\n' || s[j]=='\t' || s[j]=='\r' || s[j]=='\0') {if (k>0)
{s1[k]='\0';k=0;a[i][atoi(s1)]=1;}}
else s1[k++]=s[j];
}
fclose(f);
}
void DFS(int u){
int v;
fprintf(f,"%3d",u);
chuaxet[u]=0;
for (v=1;v<=n;v++)
if (a[u][v]==1 && chuaxet[v]) DFS(v);
}
void main(void){
int i;
clrscr();
ReadData();
f=fopen("ketqua.out","w");
for (i=1;i<=n;i++)
if (chuaxet[i]) DFS(i);
fclose(f);
printf("Da xong");
getch();
}
//Bai 2 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20],solt=0,trace[20];
FILE *f;
void ReadData(void){
int i,j;
f=fopen("F:\dothi.in","r");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++) chuaxet[i]=1;
for (i=1;i<=n;i++){
for (j=1;j<=n;j++) fscanf(f,"%d",&a[i][j]);
}
fclose(f);
}
Trang 2void DFS(int u){
int v;
fprintf(f,"%3d",u);
chuaxet[u]=0;
trace[u]=solt;
for (v=1;v<=n;v++)
if (a[u][v]==1 && chuaxet[v]) DFS(v); }
void WriteData(void){
int i,j;
f=fopen("F:\ketqua.out","w");
fprintf(f,"%d",solt);
for (i=1;i<=solt;i++){
fprintf(f,"%s","\n");
for (j=1;j<=n;j++)
if (trace[j]==i) fprintf(f,"%3d",j); }
fclose (f);
}
void main(void){
int i;
clrscr();
ReadData();
for (i=1;i<=n;i++)
if (chuaxet[i]) { solt++; DFS(i);}
WriteData();
printf("Da xong");
getch();
}
//Bai 3 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20],s,t,truoc[20]; FILE *f;
void ReadData(void){
int i,j;
f=fopen("F:\dothi3.in","r");
fscanf(f,"%d%d%d",&n,&s,&t);
for (i=1;i<=n;i++) {chuaxet[i]=1;truoc[i]=0;} for (i=1;i<=n;i++){
for (j=1;j<=n;j++) fscanf(f,"%d",&a[i][j]); }
fclose(f);
}
Trang 3void DFS(int u){
int v;
//fprintf(f,"%3d",u);
chuaxet[u]=0;
for (v=1;v<=n;v++)
if (a[u][v]==1 && chuaxet[v]) {truoc[v]=u;DFS(v);}
}
void WriteData(void){
int i,j;
f=fopen("F:\ketqua3.out","w");
if (truoc[t]==0) fprintf(f,"%s","Do thi khong lien thong");
else {
fprintf(f,"%3d",t);i=t;
while (truoc[i])
{fprintf(f,"%3d",truoc[i]);i=truoc[i];}
}
fclose (f);
}
void main(void){
clrscr();
ReadData();
DFS(s);
WriteData();
printf("Da xong");
getch();
}
//Bai 4 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
struct DSCanh {
int Dau;
int Cuoi;};
int a[20][20],n,chuaxet[20],m,Socanh=0;
DSCanh canh[50],cay[50];
FILE *f;
void ReadData(void){
int i,j;
f=fopen("dothi.in","r");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=n;i++) {chuaxet[i]=1;
for (j=1;j<=n;j++) a[i][j]=0;}
for (i=1;i<=m;i++) fscanf(f,"%d%d",&canh[i].Dau,&canh[i].Cuoi); fclose(f);
for (i=1;i<=m;i++)
{a[canh[i].Dau][canh[i].Cuoi]=1;a[canh[i].Cuoi][canh[i].Dau]=1; }
}
void Cay_khung(int u){
int v;
chuaxet[u]=0;
for (v=1;v<=n;v++)
if (a[u][v]==1 && chuaxet[v])
{Socanh++;cay[Socanh].Dau=u;cay[Socanh].Cuoi=v;Cay_khung(v);} }
void WriteData(void){
int i;
f=fopen("ketqua.out","w");
Trang 4if (Socanh!=n-1) fprintf(f,"%s","Do thi khong lien thong"); else {fprintf(f,"%3d%3d",n,Socanh);
for (i=1;i<=Socanh;i++)
fprintf(f,"%s%3d%3d","\n",cay[i].Dau,cay[i].Cuoi);} fclose (f);
}
void main(void){
clrscr();
ReadData();
Cay_khung(1);
WriteData();
printf("Da xong");
getch();
}
//Bai 5 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20],Sodinh=0,Solt=0,Soltcau;
FILE *f;
void ReadData(void){
int i,j;
f=fopen("dothi.in","r");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++){
for (j=1;j<=n;j++) fscanf(f,"%d",&a[i][j]);
}
fclose(f);
}
void DFS(int u){
int v;
chuaxet[u]=0;
for (v=1;v<=n;v++)
if (a[u][v]==1 && chuaxet[v]) DFS(v);
}
int CanhCau(int i){
int j;
for (j=1;j<=n;j++) chuaxet[j]=1;
chuaxet[i]=0;
Soltcau=0;
for (j=1;j<=n;j++)
if (chuaxet[j]) {Soltcau++;DFS(j);}
if (Soltcau>Solt) return(1);
return(0);
}
void main(void){
int i;
clrscr();
ReadData();
for (i=1;i<=n;i++) chuaxet[i]=1;
for (i=1;i<=n;i++)
if (chuaxet[i]) {Solt++;DFS(i);}
f=fopen("ketqua.out","w");
fprintf(f,"\n");
for (i=1;i<=n;i++)
if (CanhCau(i)) {Sodinh++;fprintf(f,"\n%3d",i);}
rewind(f);
fprintf(f,"%d",Sodinh);
printf("Da xong");
getch();
}
//Bai 6 ( Phan test Do thi)
Trang 5#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],b[20][20],n,chuaxet[20],Socanh=0,Solt=0,Soltcanh; FILE *f;
void ReadData(void){
int i,j;
f=fopen("dothi.in","r");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++){
for (j=1;j<=n;j++) fscanf(f,"%d",&b[i][j]);
}
fclose(f);
}
void DFS(int u){
int v;
chuaxet[u]=0;
for (v=1;v<=n;v++)
if (a[u][v]==1 && chuaxet[v]) DFS(v);
}
int CanhCau(int i,int j){
int u,v;
for (u=1;u<=n;u++) chuaxet[u]=1;
for (u=1;u<=n;u++)
for (v=1;v<=n;v++) a[u][v]=b[u][v];
a[i][j]=0;a[j][i]=0;
Soltcanh=0;
for (u=1;u<=n;u++)
if (chuaxet[u]) {Soltcanh++;DFS(u);}
if (Soltcanh>Solt) return(1);
return(0);
}
void main(void){
int i,j;
clrscr();
ReadData();
for (i=1;i<=n;i++) chuaxet[i]=1;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++) a[i][j]=b[i][j];
for (i=1;i<=n;i++)
if (chuaxet[i]) {Solt++;DFS(i);}
f=fopen("ketqua.out","w");
fprintf(f,"\n");
for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
if (b[i][j])
if (CanhCau(i,j)) {Socanh++;fprintf(f,"\n%3d%3d",i,j);} rewind(f);
fprintf(f,"%d",Socanh);
printf("Da xong");
getch();
}
//Bai 7 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20],q[20];
FILE *f;
void ReadData(void){
int i,j,k=0;char *s,*s1;
f=fopen("dothi.in","r");
Trang 6fgets(s,255,f);
n=atoi(s);
for (i=1;i<=n;i++) {
for (j=1;j<=n;j++) a[i][j]=0;
chuaxet[i]=1;}
for (i=1;i<=n;i++){
fgets(s,255,f);
for (j=0;j<=strlen(s);j++)
if (s[j]==' ' || s[j]=='\n' || s[j]=='\t' || s[j]=='\r' || s[j]=='\0') {if (k>0)
{s1[k]='\0';k=0;a[i][atoi(s1)]=1;}}
else s1[k++]=s[j];
}
fclose(f);
}
void BFS(int u){
int s,v,dau,cuoi;
chuaxet[u]=0;
dau=1;cuoi=1;q[dau]=u;
while (dau<=cuoi){
v=q[dau];
fprintf(f,"%3d",v);
dau++;
for (s=1;s<=n;s++)
if (a[v][s] && chuaxet[s])
{q[++cuoi]=s;chuaxet[s]=0;}
}
}
void main(void){
int i;
clrscr();
ReadData();
f=fopen("ketqua.out","w");
for (i=1;i<=n;i++)
if (chuaxet[i]) BFS(i);
fclose(f);
printf("Da xong");
getch();
}
//Bai 8 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20],q[20];
FILE *f;
void ReadData(void){
int i,j,k=0;char *s,*s1;
f=fopen("dothi.in","r");
fgets(s,255,f);
n=atoi(s);
for (i=1;i<=n;i++) {
for (j=1;j<=n;j++) a[i][j]=0;
chuaxet[i]=1;}
for (i=1;i<=n;i++){
fgets(s,255,f);
for (j=0;j<=strlen(s);j++)
if (s[j]==' ' || s[j]=='\n' || s[j]=='\t' || s[j]=='\r' || s[j]=='\0') {if (k>0)
{s1[k]='\0';k=0;a[i][atoi(s1)]=1;}}
else s1[k++]=s[j];
}
Trang 7fclose(f);
}
void BFS(int u){
int s,v,dau,cuoi;
chuaxet[u]=0;
dau=1;cuoi=1;q[dau]=u;
while (dau<=cuoi){
v=q[dau];
fprintf(f,"%3d",v);
dau++;
for (s=1;s<=n;s++)
if (a[v][s] && chuaxet[s])
{q[++cuoi]=s;chuaxet[s]=0;}
}
}
void main(void){
int i;
clrscr();
ReadData();
f=fopen("ketqua.out","w");
for (i=1;i<=n;i++)
if (chuaxet[i]) BFS(i);
fclose(f);
printf("Da xong");
getch();
}
//Bai 9 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20],s,t,truoc[20],q[20];
FILE *f;
void ReadData(void){
int i,j;
f=fopen("dothi.in","r");
fscanf(f,"%d%d%d",&n,&s,&t);
for (i=1;i<=n;i++) {chuaxet[i]=1;truoc[i]=0;}
for (i=1;i<=n;i++){
for (j=1;j<=n;j++) fscanf(f,"%d",&a[i][j]);
}
fclose(f);
}
void BFS(int u){
int s,v,dau,cuoi;
chuaxet[u]=0;
dau=1;cuoi=1;q[dau]=u;
while (dau<=cuoi){
v=q[dau];
fprintf(f,"%3d",v);
dau++;
for (s=1;s<=n;s++)
if (a[v][s] && chuaxet[s])
{q[++cuoi]=s;truoc[s]=v;chuaxet[s]=0;} }
}
void WriteData(void){
int i,j;
f=fopen("ketqua.out","w");
if (truoc[t]==0) fprintf(f,"%s","Do thi khong lien thong"); else { fprintf(f,"%3d",t);i=t;
Trang 8while (truoc[i])
{fprintf(f,"%3d",truoc[i]);i=truoc[i];}
}
fclose (f);
}
void main(void){
clrscr();
ReadData();
BFS(s);
WriteData();
printf("Da xong");
getch();
}
//Bai 10 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20],Sodinh=0,Solt=0,Soltcau,q[20]; FILE *f;
void ReadData(void){
int i,j;
f=fopen("dothi.in","r");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++){
for (j=1;j<=n;j++) fscanf(f,"%d",&a[i][j]);
}
fclose(f);
}
void BFS(int u){
int s,v,dau,cuoi;
chuaxet[u]=0;
dau=1;cuoi=1;q[dau]=u;
while (dau<=cuoi){
v=q[dau];
dau++;
for (s=1;s<=n;s++)
if (a[v][s] && chuaxet[s])
{q[++cuoi]=s;chuaxet[s]=0;}
}
}
int DinhCau(int i){
int j;
for (j=1;j<=n;j++) chuaxet[j]=1;
chuaxet[i]=0;
Soltcau=0;
for (j=1;j<=n;j++)
if (chuaxet[j]) {Soltcau++;BFS(j);}
if (Soltcau>Solt) return(1);
return(0);
}
void main(void){
int i;
clrscr();
ReadData();
for (i=1;i<=n;i++) chuaxet[i]=1;
for (i=1;i<=n;i++)
if (chuaxet[i]) {Solt++;
Trang 9f=fopen("ketqua.out","w");
fprintf(f,"\n");
for (i=1;i<=n;i++)
if (DinhCau(i)) {Sodinh++;fprintf(f,"\n%3d",i);}
rewind(f);
fprintf(f,"%d",Sodinh);
printf("Da xong");
getch();
}
//Bai 11 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],b[20][20],n,chuaxet[20],Socanh=0, Solt=0,Soltcanh,q[20]; FILE *f;
void ReadData(void){
int i,j;
f=fopen("dothi.in","r");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++){
for (j=1;j<=n;j++) fscanf(f,"%d",&b[i][j]);
}
fclose(f);
}
void BFS(int u){
int s,v,dau,cuoi;
chuaxet[u]=0;
dau=1;cuoi=1;q[dau]=u;
while (dau<=cuoi){
v=q[dau];
dau++;
for (s=1;s<=n;s++)
if (a[v][s] && chuaxet[s])
{q[++cuoi]=s;chuaxet[s]=0;}
}
}
int CanhCau(int i,int j){
int u,v;
for (u=1;u<=n;u++) chuaxet[u]=1;
for (u=1;u<=n;u++)
for (v=1;v<=n;v++) a[u][v]=b[u][v];
a[i][j]=0;a[j][i]=0;
Soltcanh=0;
for (u=1;u<=n;u++)
if (chuaxet[u]) {Soltcanh++;BFS(u);}
if (Soltcanh>Solt) return(1);
return(0);
}
void main(void){
int i,j;
clrscr();
ReadData();
for (i=1;i<=n;i++) chuaxet[i]=1;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++) a[i][j]=b[i][j];
for (i=1;i<=n;i++)
if (chuaxet[i]) {Solt++;BFS(i);}
f=fopen("ketqua.out","w");
fprintf(f,"\n");
for (i=1;i<=n-1;i++)
Trang 10for (j=i+1;j<=n;j++)
if (b[i][j])
if (CanhCau(i,j)) {Socanh++;fprintf(f,"\n%3d%3d",i,j);} rewind(f);
fprintf(f,"%d",Socanh);
printf("Da xong");
getch();
}
//Bai 12 ( Phan test Do thi)
//Bai 13 ( Phan test Do thi)
//Bai 14 ( Phan test Do thi)
//Bai 15 ( Phan test Do thi)
//Bai 16 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20],d[20],truoc[20],bd,kt;
FILE *f;
void ReadData(void){
int i,j;
f=fopen("dothi.in","r");
fscanf(f,"%d%d%d",&n,&bd,&kt);
for (i=1;i<=n;i++){
chuaxet[i]=1;
for (j=1;j<=n;j++) fscanf(f,"%d",&a[i][j]);
}
fclose(f);
}
void Duong_di(int s){
int i,ok=1,min,vt;
d[s]=0;chuaxet[s]=0;
for (i=1;i<=n;i++)
if (chuaxet[i]) {d[i]=a[s][i];truoc[i]=s;}
while(ok){
min=32000;vt=-1;
for (i=1;i<=n;i++)
if (chuaxet[i])
if (d[i]<min && d[i]) {min=d[i];vt=i;}
if (vt==-1) ok=0;
else { chuaxet[vt]=0;
for (i=1;i<=n;i++)
if (chuaxet[i] && a[vt][i]!=0)
if (d[i]>d[vt]+a[vt][i] || d[i]==0) {d[i]=d[vt]+a[vt][i];truoc[i]=vt;}
}
}
}
void WriteData(void){
int i,dd[20],dem;
if (d[kt]==0) {printf("Khong co duong di tu %d den %d",bd,kt);return;} i=kt;dem=1;dd[1]=i;
while (truoc[i]!=bd)
{dem++;dd[dem]=truoc[i];i=truoc[i];}
printf("Duong di tu %d den %d:\n%d",bd,kt,bd);
for (i=dem;i>=1;i ) printf(" >%d",dd[i]);
}
void main(void){
int i,j;
clrscr();
ReadData();
Duong_di(bd);
Trang 11WriteData();
getch();
}
//Bai 17 ( Phan test Do thi)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int a[20][20],n,chuaxet[20];
FILE *f;
void ReadData(void){
int i,j;
f=fopen("dothi.in","r");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++){
chuaxet[i]=1;
for (j=1;j<=n;j++) fscanf(f,"%d",&a[i][j]);
}
fclose(f);
}
void DFS(int u){
int v;
chuaxet[u]=0;
for (v=1;v<=n;v++)
if (chuaxet[v] && a[u][v]) DFS(v);
}
int Lienthong(void){
int i;
DFS(1);
for (i=1;i<=n;i++)
if (chuaxet[i]) return(0);
return(1);
}
int Kt_Euler(void){
int i,s,j;
for (i=1;i<=n;i++) {
s=0;
for (j=1;j<=n;j++) s=s+a[i][j];
if (s%2==1) return(0);}
return(1);
}
void Chutrinh(int u){
int S[50],i,j,top,CE[50],dem=0,v;
top=1;
S[top]=u;
while (top>0){
v=S[top];
i=0;
for (j=1;j<=n;j++)
if (a[v][j]) {i=j;break;}
if (i>0){top=top+1;S[top]=i;a[v][i]=0;a[i][v]=0;}
else {top ;dem++;CE[dem]=v;}
}
for (i=dem;i>1;i ) printf("%d >",CE[i]);
printf("%d",CE[1]);
}
void main(void){
int i,j;
clrscr();
ReadData();
if (Lienthong()==0) printf("Do thi khong lien thong");
else if (Kt_Euler()==0) printf("Do thi lien thong nhung khong co chu trinh");
else Chutrinh(3);