1.实验目的
(1)掌握图的相关概念,包括图、有向图、无向图、子图、连通图、度、入度、出度、简单回路、环等;
(2)掌握图的各种存储结构,包括邻接矩阵和邻接表等;
(3)掌握图的基本运算,包括创建图、输出图、深度优先遍历、广度优先遍历等;
(4)掌握图的其他运算,包括最小生成树、最短路径、拓扑排序和关键路径等算法。
2.实验内容
利用Prim算法求网的最小生成树。
要求和提示:设图的顶点数为10个。为简单起见,网中边的权值设成小于100的整数,可利用C语言的rand()函数产生。
3.源程序和实验结果
#includeusing namespace std; #define MAX 100 #define INF 10000 int graph[MAX][MAX]; int prim(int graph[][MAX], int n) { int lowcost[MAX],closedge[MAX]; int min_1,min_2,sum = 0; for(int i = 2;i <= n;i++) { lowcost[i] = graph[1][i]; closedge[i] = 1; } closedge[1] = 0; for(int i =1;i <= n-1;i++) { min_1 = INF; min_2 = 0; for(int j = 1;j <= n;j++) { if(lowcost[j] < min_1&&closedge[j]!=0) { min_1 = lowcost[j]; min_2 = j; } } cout << "V" << closedge[min_2] << "->V" << min_2 << "=" << min_1 < > m >> n;//m顶点数 n边数 memset(graph,INF,sizeof(graph)); for(int i = 1;i <= n;i++) { cin >> v >> e >> cost; graph[v][e] = graph[e][v] = cost; } int Sum; Sum = prim(graph, m); cout << "最小权值和" << Sum << endl; system("pause"); }



