Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

__Prim__

Thuật toán Prim:

Bước 1 (Khởi tạo):

            T = f; D(T) = 0; VT = f; u =<Đỉnh xuất phát bất kỳ>;

V = V\u; VT = VT È u;

Bước 2 (Lặp):

            while (V≠f ) {

                        <Chọn e = (v, t) là cạnh có trọng số nhỏ nhất sao cho vÎV, tÎVT >;

                        if ( d(e) = ¥ ) { <đồ thị không liên thông>; return (¥);}

                        T = TÈ{e}; D(T) = D(T) + d(e);

                        V = V \ v; VT = VTÈv;

            }

Bước 3 (Trả lại kết quả):

            Return( T, D(T));

CODE

#include <stdio.h>

#include <conio.h>

#define MAX_VALUE 9999

int **a,n,*dau,*cuoi;

void Prim(int start){

            int i,j,k,min,dmin1,dmin2,t,sum=0;

            int *d = new int[n];

            /* Khoi tao */

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

                        d[i]=0;

            }

            d[start]=1;

            k=0;

            //

            while(k<n-1){

                        dmin1 = -1;

                        dmin2 = -1;

                        min = MAX_VALUE;

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

                                    if(d[i]==1){

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

                                                            if(d[j]==0 && a[i][j]!=0 && a[i][j]<min){

                                                                        min = a[i][j];

                                                                        dmin1 = i;

                                                                        dmin2 = j;

                                                            }

                                                }

                                    }

                        }

                        if(dmin1 == -1){

                                    break;

                        }

                        dau[k] = dmin1;

                        cuoi[k] = dmin2;

                        sum+=a[dmin1][dmin2];

                        d[dmin2]=1;

                        k++;

            }

            /*In ket qua*/

            printf("

Cay khung nho nhat = %d",sum);

            printf("

Chua cac canh :

");

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

                        printf("%d %d

",dau[i]+1,cuoi[i]+1);

            }

}

void main(){

            clrscr();

            int i,j;

            FILE *in;

            in = fopen("prim.txt","r");

            //Doc chi so mang va tao mang 2 chieu

            fscanf(in,"%d",&n);

            a = new int*[n];

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

                        a[i] = new int[n];

            }

            //Doc gia tri mang

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

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

                                    fscanf(in,"%d",&a[i][j]);

                        }

            }

            //In

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

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

                                    printf("%d ",a[i][j]);

                        }

                        printf("

");

            }

            printf("

");

            //

            dau = new int[n-1];

            cuoi = new int[n-1];

            Prim(0);

            getch();

}

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: #zzz