50
Bam Mo #include <stdio.h> #include <conio.h> /*--------Phan khai bao---------*/ const int B=6; typedef int infor; struct element { infor data; element *next; }; typedef element *List; List A[B]; /*--------Phan dinh nghia ham-----*/ //--------------------------------- //Ham kiem tra so nguyen to int kt_ngto(int x) { int i=1; if(x>1) { do i++; 1

Phan Tich Va Thiet Ke Thuat Toan

Embed Size (px)

Citation preview

Page 1: Phan Tich Va Thiet Ke Thuat Toan

Bam Mo

#include <stdio.h>

#include <conio.h>

/*--------Phan khai bao---------*/

const int B=6;

typedef int infor;

struct element

{

infor data;

element *next;

};

typedef element *List;

List A[B];

/*--------Phan dinh nghia ham-----*/

//---------------------------------

//Ham kiem tra so nguyen to

int kt_ngto(int x)

{

int i=1;

if(x>1)

{

do i++;

while((x%i)!=0);

if(x==i) return 1;

1

Page 2: Phan Tich Va Thiet Ke Thuat Toan

else return 0;

}

else return 0;

}

//----------------------------------

//Ham bam

int h(int x)

{

int du,kq;

du=x%10;

switch(du)

{

case 1:kq=0;break;

case 2:kq=1;break;

case 3:kq=2;break;

case 5:kq=3;break;

case 7:kq=4;break;

case 9:kq=5;break;

}

return kq;

}

//--------------------------

//Ham lam rong bang bam

void rong()

2

Page 3: Phan Tich Va Thiet Ke Thuat Toan

{

int i;

for(i=0;i<B;i++) A[i]=NULL;

}

//--------------------------

//Ham tra ve stt cua lop co chua x, -1 neu khong co x

int stt_lop_x(infor x)

{

int i;

List p;

i=h(x);//chu so cuoi cung thoa man

p=A[i];

while((p!=NULL)&&((*p).data!=x)) p=(*p).next;

if(p!=NULL) return i;

else return -1;

}

//-----------------------------

//Ham chen x vao dau danh sach

void InsertFirst(infor x,List &F)

{

List p;

p=new element;

(*p).data=x;

(*p).next=F;

3

Page 4: Phan Tich Va Thiet Ke Thuat Toan

F=p;

}

//----------------------------

//Ham tim kiem x co trong bang bam hay khong?

int tim_kiem(infor x)

{

if(stt_lop_x(x)!=-1) return 1;

else return 0;

}

//-----------------------------

//Ham xoa x khoi bang bam

void xoa(infor x,List &F)

{

int i;

List before,p;

p=F;

while((p!=NULL)&&((*p).data!=x))

{

before=p;

p=(*p).next;

}

if(p!=NULL)

{

if(p==F) F=(*p).next;

4

Page 5: Phan Tich Va Thiet Ke Thuat Toan

else (*before).next=(*p).next;

delete p;

}

}

//-----------------------------

//Ham xuat 1 lop thuoc bang bam

void xuat_lop(int stt)

{

//int i=1;

List p;

p=A[stt];

while (p!=NULL)

{

printf("%3d",(*p).data);

// i++;

p=(*p).next;

}

}

//-----------------------------

// Ham xuat bang bam

void xuat_bang()

{

for(int i=0;i<B;i++)

{

5

Page 6: Phan Tich Va Thiet Ke Thuat Toan

printf("\nLop %d:",i);

xuat_lop(i);

}

}

//-----------------------------

//Menu ham chinh

int menu()

{

int i;

printf("\n\n++++++++++++++++++++++++++++++++++++++\n");

printf("\n--------------------------------------\n");

printf("\n Moi ban chon chuc nang:");

printf("\n 1.Them phan tu vao bang bam.");

printf("\n 2.Xuat bang bam.");

printf("\n 3.Tim kiem mot phan tu trong bang bam.");

printf("\n 4.Xoa mot phan tu trog bang bam.");

printf("\n 0.Thoat chuong trinh.");

printf("\n -->Choice=");

scanf("%d",&i);

printf("\n--------------------------------------\n");

printf("\n++++++++++++++++++++++++++++++++++++++\n");

return i;

}

/*-------------HAM CHINH-------------*/

6

Page 7: Phan Tich Va Thiet Ke Thuat Toan

main()

{

//clrscr();

int i,stt;

infor x;

rong();

do

{

i=menu();

switch(i)

{

case 1:

printf("\nNhap so nguyen to: ");

scanf("%d",&x);

if(kt_ngto(x))

{

if(!tim_kiem(x))

{

stt=h(x);

InsertFirst(x,A[stt]);

printf("\nOK!");

}

else printf("\nSo ban nhap da ton tai!!");

}

7

Page 8: Phan Tich Va Thiet Ke Thuat Toan

else

printf("\nError: So ban vua nhap khong phai so nguyen to.");

break;

case 2: xuat_bang();

break;

case 3: printf("\nNhap phan tu muon tim kiem: ");scanf("%d",&x);

if(tim_kiem(x))

printf("Phan tu %d thuoc lop thu %d!",x,stt_lop_x(x));

else

printf("\nError: Khong ton tai %d trong bang bam!",x);

break;

case 4: printf("\nNhap phan tu muon xoa: ");scanf("%d",&x);

if(tim_kiem(x))

{

stt=h(x);

xoa(x,A[stt]);

printf("\nDa xoa %d ra khoi bang bam!",x);

}

else printf("\nError: Khong tim thay %d de xoa!",x);

break;

}

}

while(i!=0);

}

8

Page 9: Phan Tich Va Thiet Ke Thuat Toan

BamDong

//

// Code by Jellydn

// Env : Dev-C++

// Chuong trinh dung bang bam dong voi cac ki tu

//

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

const int N=10;

const char del='*';

const char emp=' ';

typedef char infor;

infor A[N];

// Cac nguyen mau ham

int Hash(char x); // Ham bam tim lop cho ki tu

void Create(infor A[]); // Ham khoi tao bang bam

int LocateClose (char x,infor A[]); // Tim vi tri ,co thi tra ve vi tri cua lop , sai thi -1

void InsertClose(char x,infor A[]); // Chen them 1 phan tu vao lop

void Delete(char x,infor A[]); // Xoa 1 phan tu khoi bang bam

void Display(infor A[]); // Hien thi danh sach bang bam

int main()

{

int cv,i;

9

Page 10: Phan Tich Va Thiet Ke Thuat Toan

char c,t,s[80];

Create(A);

printf("\n --------------------------------------- ");

printf("\n | |");

printf("\n | Chuong trinh dung bang bam |");

printf("\n | dong voi cac ki tu |");

printf("\n | vao cac 10 lop la : |");

printf("\n | 0,1,2,3,4,5,6,7,8,9 |");

printf("\n | |");

printf("\n --------------------------------------- ");

while(1)

{

printf("\n\n");

printf("\n ======================================= ");

printf("\n | |");

printf("\n | Main MENU |");

printf("\n | [1].Hien bang bam hien tai |");

printf("\n | [2].Tim mot phan tu |");

printf("\n | [3].Them mot phan tu |");

printf("\n | [4].Xoa mot phan tu |");

printf("\n | [5].Thoat chuong trinh |");

printf("\n --------------------------------------- ");

printf("\n Ban chon :");

10

Page 11: Phan Tich Va Thiet Ke Thuat Toan

scanf("%d",&cv);

gets(s);

switch(cv)

{

case 1 : Display(A);

printf("\n Press A key to continue...");

getch();

break;

case 2 : printf("\n Ban muon tim phan tu :");

scanf("%c",&t);

i=LocateClose(t,A);

if(i>=0)

printf("\n Tim thay phan tu trong lop thu %d cua bang bam ",i);

else

printf("\n Khong tim thay phan tu trong bang bam");

printf("\n Press A key to continue...");

getch();

break;

case 3 : printf("\n Ban muon them phan tu :");

scanf("%c",&t);

InsertClose(t,A);

printf("\n Press A key to continue...");

getch();

11

Page 12: Phan Tich Va Thiet Ke Thuat Toan

break;

case 4 : printf("\n Ban muon xoa phan tu :");

scanf("%c",&t);

Delete(t,A);

printf("\n Press A key to continue...");

getch();

break;

case 5 : exit(0); break;

}

}

}

// Cac chuong trinh con

int Hash(char x)

{

int i=x;

return (i%10);

}

void Create(infor A[])

{

int i,j;

infor p='a';

12

Page 13: Phan Tich Va Thiet Ke Thuat Toan

// Khoi tao bang bam

for(i=0;i<N;i++)

A[i]=emp;

// Them 3 ki tu vao cac lop tuong ung trong bang bam

// Them a ,b va c vao bang bam

for(j=0;j<3;j++)

{

i=Hash(p);

A[i]=p++;

}

}

int LocateClose (char x,infor A[])

{

int dem=0,vt=Hash(x),i;

// Xet duyet het tat ca cac mang

// Neu dung phan tu can tim thi dung ngay vi tri do

// con ko Neu la phan tu empty thi dung luon ,tra ve -1 -> ko co

// con ko thi tang vt can tim len

// vt=(vt+1)% N

for(i=0;i<N;i++)

{

if (A[vt]==x)return vt ;

else if(A[vt]==emp) return -1;

else vt=(vt+1)%N;

13

Page 14: Phan Tich Va Thiet Ke Thuat Toan

};

// Khi duyet het 1 vong thi nghia la ko tim ra

// nen tra ve -1

return -1;

}

void InsertClose(char x,infor A[])

{

int dem=0,vt=Hash(x);

//tim vi tri de chen

while((dem < N) && A[vt]!= del && A[vt]!=x && A[vt]!= emp)

{

dem++;

vt=(vt+1)%N;

}

if(A[vt]== del||A[vt]== emp) A[vt]=x;

else if(A[vt]==x) printf("\n Da co %c trong bang bam ",x);

else printf("\n Bang bam da day ");

}

void Delete(char x,infor A[])

{

int vt=LocateClose(x,A);

if(vt!=-1)

{

A[vt]=del;

14

Page 15: Phan Tich Va Thiet Ke Thuat Toan

printf("\n Da xoa phan tu %c ra khoi bang bam ",x);

}

else

printf("\n Khong co phan %c can xoa trong bang bam ",x);

}

void Display(infor A[])

{

int i;

infor p;

printf("\n Cac phan tu trong bang bam :");

for(i=0;i<N;i++)

{

if(A[i]!=emp && A[i]!=del)

printf("\n %d %c " ,i,A[i]);

else printf("\n %d ",i);

}

}

15

Page 16: Phan Tich Va Thiet Ke Thuat Toan

Dij kiem tra

/*

+ Thuat toan Dijkstra

+ Tim duong di ngan nhat trong do thi co trong so khong am

+ Writed by Thelinh_tk

*/

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#define filein "Dijkstra.inp"

#define fileout "Dijkstra.out"

#define NMAX 100

#define MAX 10000

int n,s,t;

int c&#&#[NMAX&#&#]&#&#[NMAX&#&#];

int Previous&#&#[NMAX&#&#];

bool Free&#&#[NMAX&#&#];

int d&#&#[NMAX&#&#];

void Input_Data()

{

int i,j;

FILE *fp;

fp=fopen(filein,"r");

fscanf(fp,"%d%d%d",&n,&s,&t);

16

Page 17: Phan Tich Va Thiet Ke Thuat Toan

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

{

fscanf(fp,"%d",&c&#&#[i&#&#]&#&#[j&#&#]);

// Neu cai nao bang 0 thi gan cho no la MAX

if(c&#&#[i&#&#]&#&#[j&#&#]==0)

c&#&#[i&#&#]&#&#[j&#&#]=MAX;

}

}

fclose(fp);

}

// Khoi tao cac gia tri dau

void Init()

{

int v;

for(v=1;v<=n;v++)

{

// Khoi tao bang dau minpath tu s den v=c&#&#[s&#&#]&#&#[v&#&#]

d&#&#[v&#&#]=c&#&#[s&#&#]&#&#[v&#&#];

// Danh dau

Previous&#&#[v&#&#]=s;

// Tat ca cac dinh deu o trang thai tu do

Free&#&#[v&#&#]=true;

17

Page 18: Phan Tich Va Thiet Ke Thuat Toan

}

// Co dinh s

Previous&#&#[s&#&#]=0;

d&#&#[s&#&#]=0;

Free&#&#[s&#&#]=false;

}

void Dijkstra()

{

int u,v,minp;

// Lam trong khi t con tu do

while(Free&#&#[t&#&#])

{

minp=MAX;

// Tim trong tap T ra dinh u co d&#&#[u&#&#] min

// Chu y tap T la tap cac dinh chua co dinh nhan

for(v=1;v<=n;v++)

{

if(Free&#&#[v&#&#] && (minp>d&#&#[v&#&#]))

{

minp=d&#&#[v&#&#];

u=v;

}

}

// Sau khi tim duoc u thi ta co dinh u

18

Page 19: Phan Tich Va Thiet Ke Thuat Toan

Free&#&#[u&#&#]=false;

// Dung dinh u de toi uu hoa cac dinh trong T

if(Free&#&#[t&#&#])

{

// Tim trong tap T ra mot dinh v ma co

// d&#&#[u&#&#]+c&#&#[u&#&#]&#&#[v&#&#]<d&#&#[v&#&#]

for(v=1;v<=n;v++)

{

if(Free&#&#[v&#&#] && (d&#&#[u&#&#]+c&#&#[u&#&#]&#&#[v&#&#]<d&#&#[v&#&#]))

{

// Sua lai nhan cua v

d&#&#[v&#&#]=d&#&#[u&#&#]+c&#&#[u&#&#]&#&#[v&#&#];

// Luu vet

Previous&#&#[v&#&#]=u;

}

}

}

}

}

// Xuat ket qua ra file

void Output_Data()

{

int i;

19

Page 20: Phan Tich Va Thiet Ke Thuat Toan

FILE *fp;

fp=fopen(fileout,"w");

fprintf(fp,"+ Duong di ngan nhat tu %d den %d la :\n",s,t);

fprintf(fp,"%d<=",t);

i=Previous&#&#[t&#&#];

while(i!=s)

{

fprintf(fp,"%d<=",i);

i=Previous&#&#[i&#&#];

}

fprintf(fp,"%d",s);

fprintf(fp,"\n+ Do dai duong di ngan nhat la :%d",d&#&#[t&#&#]);

fclose(fp);

}

int main()

{

// Nhap du lieu

Input_Data();

// Initialize app

Init();

// Dijkstra

Dijkstra();

// Xuat du lieu

Output_Data();

20

Page 21: Phan Tich Va Thiet Ke Thuat Toan

return 0;

}

21

Page 22: Phan Tich Va Thiet Ke Thuat Toan

DuongDiNganNhat_Dijktra

//chuong trinh tim duong di ngan nhat tu 1 dinh

//Dung giai thuat dijktra

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int s[10]; //tap chua cac dinh

int n; //so dinh

int P[10]; //luu tru duog di

int D[10]; //do dai duong di ngan nhat hien tai tu dinh 1->i

int C[10][10],m;

//--------------------------------------------------

//Nhap trong do cho C

void Input_from_file()

{

int i=0,j=0;

FILE *fp;

fp=fopen("dijstra.txt","r");

if(fp==NULL)

{

printf("\nkhong mo duoc file");

}

else

{

22

Page 23: Phan Tich Va Thiet Ke Thuat Toan

while(!feof(fp))

{

fscanf(fp,"%d",&C[i][j]);

if(j==n-1)

{

i++;

j=0;

}

else

j++;

}

}

fclose(fp);

}

//--------------------------------------------------

//xuat C

void OutputC()

{

int i,j;

printf("\n");

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

printf("%5d\t",C[i][j]);

23

Page 24: Phan Tich Va Thiet Ke Thuat Toan

printf("\n");

}

}

//---------------------------------------------------

void outputD()

{

for (int i=0;i<n;i++)

printf ("\t%d",D[i]);

}

//--------------------------------------------------

//tim phan tu nho nhat trong mang a ma khong nam trong s ,

//tra ve vi tri phan tu do trong mang

int min (int *a)

{

int i=0,j,kq;

// lay phan tu nho nhat dau tien

while (s[i]==1)

i++;

m=a[i];

kq=i;

//kiem tra xem co phan tu nao nho hon khong

for (j=i;j<n;j++)

{

if (s[j]==1)

24

Page 25: Phan Tich Va Thiet Ke Thuat Toan

break;

else

if (a[j]<m)

{

m=a[j];

kq=j;

}

}

m=a[kq];

return kq;

}

//===================================================================

void dijktra ()

{

int i;

int j;

for (i=0;i<n;i++)

s[i]=0; //dinh i khong thuoc s;

s[0]=1; //dua 1 vao tap s

for (i=1;i<n;i++)

{

P[i]=0;

D[i]=C[0][i];

25

Page 26: Phan Tich Va Thiet Ke Thuat Toan

}

for (i=1;i<n;i++) //cho lap n-1 lan

{

// outputD();

j=min(D); //vi tri cua dinh nho nhat

s[j]=1; //dua dinh do vao s

// printf ("\tdinh co trso nho nhat la:%d\n",j+1);

for (int u=0;u<n;u++)

{

if (s[u]==1)

continue;

else

if (D[j]+C[j][u] <D[u])

{

D[u]=D[j]+C[j][u];

P[u]=j;

}

}

}

}

//--------------------------------------------------

int timdinh (int i)

{

int k=P[i];

26

Page 27: Phan Tich Va Thiet Ke Thuat Toan

if (k==0)

{

printf ("%d",k+1);

return 1;

}

else

{

printf ("%d<--",k+1);

return timdinh(k);

}

}

//--------------------------------------------------

//ham lay ra cac dinh

void duongdi()

{

for (int i=1;i<n;i++)

{

printf ("\n1 --> %d:",i+1);

printf ("\t%d<--",i+1);

timdinh(i);

}

}

27

Page 28: Phan Tich Va Thiet Ke Thuat Toan

//=========================================================================

int main()

{

n=5; //so dinh la 5

Input_from_file();

OutputC();

dijktra();

duongdi();

getch();

}

28

Page 29: Phan Tich Va Thiet Ke Thuat Toan

KiemTraChuTrinh

#include <stdio.h>

#include <conio.h>

#include <values.h>

#define MAX 50

/* #define inf MAXINT */

typedef int dothi[MAX][MAX] ;

dothi A;

int n;

void nhapdt()

{

int i,j;

for(i=1;i<=n;i++)

for(j=i;j<=n;j++)

{

printf("a%d%d=",i,j);

scanf("%d",&A[i][j]);

A[j][i]=A[i][j];

}

}

int acylic(dothi A,int n)

{

dothi B;

int D[MAX],i,j ,done=0;

29

Page 30: Phan Tich Va Thiet Ke Thuat Toan

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

B[i][j]=A[i][j];

while (!done)

{

for(i=1;i<=n;i++)

for(D[i]=0,j=1;j<=n;j++)

D[i]+=B[i][j];

i=1; while(i<=n&&D[i]!=1) i++;

if (i==n+1) done=1;

else

for (j=1;j<=n;j++)

{

B[i][j]=0;

B[j][i]=0;

}

}

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(B[i][j]) return 1;

return 0;

}

main()

{

30

Page 31: Phan Tich Va Thiet Ke Thuat Toan

//clrscr();

printf("nhap so dinh :");

scanf("%d",&n);

nhapdt();

acylic(A,n) ;

if(acylic(A,n))

printf("do thi co chu trinh");

else printf("khong chu trinh");

getch();

}

31

Page 32: Phan Tich Va Thiet Ke Thuat Toan

KiemTraLienThong

/* vdu duoi day lam cho 5 dinh ,co thay 5 bang so n bat ky*/

#include <stdio.h>

#include <conio.h>

#include <values.h>

#define MAX 50

#define inf MAXINT

typedef int dothi[MAX][MAX] ;

dothi A;

int P[MAX]={0} ;

int a;

void nhapdt()

{

int i,j;

for(i=1;i<=5;i++)

for(j=i;j<=5;j++)

{

printf("a%d%d=",i,j);

scanf("%d",&A[i][j]);

A[j][i]=A[i][j];

}

}

int duongdi(int a)

{

32

Page 33: Phan Tich Va Thiet Ke Thuat Toan

int Q[MAX]={0},T[MAX]={0},nQ,nT=0,i,j;

Q[a]=1;nQ=1;

while(nQ)

{

i=1; while(!Q[i])i++;

Q[i]=0;nQ--;

T[i]=1;nT++;

for(j=1;j<=5;j++)

if(A[i][j]&&(!T[j]))

if(!Q[j])

{

Q[j]=1;nQ++;

P[j]=i;

}

}

return nT;

}

main()

{

int i;

//clrscr();

nhapdt();

printf("nhao dinh a bat ky");scanf("%d",&a);

duongdi(a);

33

Page 34: Phan Tich Va Thiet Ke Thuat Toan

if(duongdi(a)==5)

{

printf("do thi lien thong");

printf("%d",5);i=5;

while(i!=a)

{

i=P[i];

printf("-->%d",i);

}

}

else printf("khong lien thong");

getch();

}

34

Page 35: Phan Tich Va Thiet Ke Thuat Toan

Kruskal

//chuong trinh tim phu toi thieu dinh 0 den cac dinh con lai

//Dung giai thuat kruskal

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

int s[50]; //tap chua cac dinh

int n; //so dinh

int cung[50][2],A[50],B[50];

int mang[50][50],m;

//--------------------------------------------------

//Nhap trong do cho C

void nhapnut()

{

FILE *f;

printf("\n nhap so nut cua do thi"); scanf("%d",&n);

f=fopen("sonut.txt","w");

fwrite(&n,sizeof(int),1,f);

fclose(f);

}

int lay_sn()

{

FILE *f;

f=fopen("sonut.txt","r");

35

Page 36: Phan Tich Va Thiet Ke Thuat Toan

if(f==NULL) printf("\n khong mo duoc file");

else

fread(&n,sizeof(int),1,f);

fclose(f);

}

void nhap(int n)

{

int i, j,k;

FILE *fp;

if ((fp = fopen("kruskal.txt", "w")) == NULL)

printf("\nKhong the tao tap tin kruskal.txt");

else

{

printf("\nNhap cac phan tu cua mang : ");

for (i=0; i<n; i++)

for (j=0; j<n; j++)

{

printf("\n W[%d][%d] = ", i, j);

scanf("%d", &k);

mang[i][j]=k;

fwrite(&k, sizeof(int), 1, fp);

}

fclose(fp);

printf("\nViec ghi hoan tat.");

36

Page 37: Phan Tich Va Thiet Ke Thuat Toan

}

}

void docfile()

{

int i,j,k;

FILE *fp;

if ((fp = fopen("kruskal.txt", "r")) == NULL)

printf("\nKhong the mo tap tin kruskal.txt");

else

{ for(i=0;i<n;i++)

{

printf("\n");

for(j=0;j<n;j++)

{

fread(&k, sizeof(int),1, fp);

printf(" %d",k);

mang[i][j]=k;

}

}

fclose(fp);

}

}

//--------------------------------------------------

//xuat C

37

Page 38: Phan Tich Va Thiet Ke Thuat Toan

void Outputmang()

{

int i,j;

printf("\n");

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

printf("%5d\t",mang[i][j]);

printf("\n");

}

}

void khoitao_AB()

{

int a,b,i;

a=n-1;

b=1;

B[0]=0;

for(i=0;i<=n-1;i++)

A[i]=i+1;

}

void lay(int x)

{

int i;

for(i=0;i<n;i++)

38

Page 39: Phan Tich Va Thiet Ke Thuat Toan

if(A[i]==x) A[i]=-1;

}

void kruskal()

{

int a,b,i,j;

int min,k=0;

khoitao_AB();

a=n-1;

b=1;

while(k<n-1)

{

min=100;

for(i=0;i<b;i++)

for(j=0;j<a;j++)

if(A[j] != -1)

if(mang[B[i]][A[j]]<min)

{

min=mang[B[i]][A[j]] ;

cung[k][0]=B[i];

cung[k][1]=A[j];

}

m+=min;

lay(cung[k][1]);

B[b]=cung[k][0];

39

Page 40: Phan Tich Va Thiet Ke Thuat Toan

b++;

k++;

}

}

void ketqua()

{

int i;

for(i=0;i<n;i++)

{ printf("\n");

printf("(%d,%d)",cung[i][0],cung[i][1]);

}

printf("\n quang duong min la:%d",m);

}

void main()

{ int chon;

lay_sn(); docfile();

do

{

printf("\n\n\tCHUONG TRINH TIM PHU TOI THIEU - GIAI THUAT KRUSKAL");

printf("\n\nCac chuc nang cua chuong trinh:\n");

printf("\n1: Tao do thi moi");

printf("\n2: xem do thi");

printf("\n3: Tim cay bao trum toi thieu cua do thi");

printf("\n0: Thoat");

40

Page 41: Phan Tich Va Thiet Ke Thuat Toan

printf("\nChon chuc nang: ");

scanf("%d", &chon);

switch(chon)

{

case 1: nhapnut();nhap(n);

break;

case 2utputmang();break;

case 3:kruskal();ketqua();break;

case 0:exit(0);

}

getch();

}

while(chon!=0);

}

41

Page 42: Phan Tich Va Thiet Ke Thuat Toan

PRIM

#include <stdio.h>

#include <conio.h>

#define MAX 50

typedef int dothi[MAX][MAX] ;

dothi A,T;

int i,j,n,tong=0;

void nhapdt()

{

int i,j;

for(i=1;i<=n;i++)

for(j=i;j<=n;j++)

{

printf("a%d%d=",i,j);

scanf("%d",&A[i][j]);

A[j][i]=A[i][j];

}

}

int prim()

{

int VT[MAX]={0},i,j,c;

int ii,jj;

VT[1]=1;

for (i=1;i<=n;i++)

42

Page 43: Phan Tich Va Thiet Ke Thuat Toan

for (j=1;j<=n;j++) T[i][j]=0;

for(c=0;c<n-1;c++)

{

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(A[i][j])

if(VT[i]&&!VT[j])

{

ii=i;jj=j;

}

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if (A[i][j])

if(VT[i]&&!VT[j])

if(A[i][j]<A[ii][jj])

{

ii=i;jj=j;

}

VT[jj]=1;

T[ii][jj]=A[ii][jj];

tong+=T[ii][jj];

T[jj][ii]=T[ii][jj];

}

return tong;

43

Page 44: Phan Tich Va Thiet Ke Thuat Toan

}

3

main()

{

//clrscr();

printf("nhap so dinh :");

scanf("%d",&n);

nhapdt();

prim() ;

printf("\ntong duong di= %d",tong);

getch();

}

44