Friday, 11 May 2012

Prim's Algorithm Implementation in C


#include<stdio.h>
#include<conio.h>


int n;
int W[100][100]; 


char iT[100];
int d[100]; 
int WT[100]; 


void uD(int t) {
int i;
for (i = 0; i < n; ++i) if ((W[t][i] != 0) && (d[i] > W[t][i])) {
d[i] = W[t][i];
WT[i] = t;
}
}


main() {
FILE *f = fopen("dist.txt", "r");
int i,j,total,treeSize;
fscanf(f, "%d", &n);
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
fscanf(f, "%d", &W[i][j]);
fclose(f);



for (i = 0; i < n; ++i)
d[i] = 100000;



for (i = 0; i < n; ++i)
iT[i] = 0;



printf("Adding node %c\n", 0 + 'A');
iT[0] = 1;
uD(0);
total = 0;
for (treeSize = 1; treeSize < n; ++treeSize) {

int min = -1;
for (i = 0; i < n; ++i) if (!iT[i]) if ((min == -1) || (d[min] > d[i]))
min = i;



printf("Adding edge %c-%c\n", WT[min] + 'A', min + 'A');
iT[min] = 1;
total += d[min];


uD(min);
}


printf("Total distance: %d\n", total);


return 0;
}

No comments:

Post a Comment