CPS 542 Prim’s algorithm Assignment 5
Goal: To implement Prim’s algorithm for finding the minimum cost spanning tree for a given undirected graph using an adjacency matrix representation of the graph. Due:
Constraints:
- use the given define and typedefs
- read graph data from stdin using input redirection
- keep the selected paths in an array of edges
- no file manipulation in any form
- compiles using make/Makefile
Statement:
Write a modular, properly documented C-program to study the above mentioned (in goal). The program should use the specified modules (given below). The input data format is:
{`
size-of-matrix number of edges start-vertex
from-vertex to-vertex weight ... example:
6 10 0 <<--(size, edges, start)
0 1 16 <<--(from, to, weight)
0 5 21
0 4 19
1 2 5
1 3 6
1 5 11
2 3 10
3 4 18
3 5 14 4 5 33`}
output:
{`
0 1 16 <<--(first edge)
1 2 5
1 3 6
1 5 11 3 4 18 total cost: 56`}
Globals:
{`
#include /* for INT_MAX */
#define N 10 /* max matrix size is 10 x 10 */
#define INF INT_MAX /* infinity? */ typedef struct edge {
int fromv; int tov; int weight; } edge; Modules needed:
1. void getdata(int amtrx[][N], int *n; int *stv);
{ fills amtrx[][] with data edge by edge, all other entries are INF,
returns actual size in n and start vertex in stv }
2. void prims(int amtrx[][N], int n, edge edgs[]);
{ finds the MCST and inserts the paths in tree in array edgs, using Prim’s algorithm }
3. void printpaths(edge edgs[], int n);
{ prints the paths to stderr, using fprintf()... } 4. int main(void); of Assignment!
The program will be invoked as:
./a5 < graphdatafile ++++>>> Create an inputfile to test your program.
Code for getdata() module:
void getdata(int amtrx[][N], int *sz, int *stv)
{
int i, j, nsz, nedg, fr, to, vtx, wt;
scanf("%d %d %d", &nsz, &nedg, &vtx);
for(i = 0; i < nsz; i++)
for(j = 0; j < nsz; j++)
am[i][j] = INF;
for(i = 0; i < nedg; i++) {
scanf("%d %d %d", &fr, &to, &wt);
amtrx[fr][to] = wt;
amtrx[to][fr] = wt;
}
*sz = nsz;
*stv = vtx;
}
Turn-in: submit via BB a tar archive file globalid-a5.tar containing files
a5/Makefile and a5/a5.c. ---- algorithm--Assumptions:
adjacency matrix N X N selected[N] initialized to 0’s edges
seen so far start vertex define INF to large number Cii = INF,
Cij = INF (if no path to) list of edges (from -> to)
select[start] = 1 edges seen s = 0 while s < N-1 {
for i = 1 to N{ min = INF
if select[i] then for j = 1 to N{
if not select[j] and min > Cij {
min = Cij, row = i, col = j }
}
}
} sel[col] = 1 add edge
< row,col,min> to array edgs increment s }
-----`}


