最小生成树-prim算法

来源:互联网 发布:开淘宝企业店流程 编辑:程序博客网 时间:2024/05/18 00:36


//邻接数组表示法#include<iostream>#define MAX 7#define INF 999999using namespace std;int graph[MAX][MAX] = { 0 };int flag = 0;   //0为无向图 1为有向图 int mincount[MAX];void init(void){int i, j;for (i = 0; i<MAX; i++)for (j = 0; j<MAX; j++)graph[i][j] = INF;}void prim(int s){int i, j, min, flag, count = 0;for (i = 0; i<MAX; i++)mincount[i] = graph[s][i];mincount[s] = 0;for (i = 0; i<MAX-1; i++){min = INF;for (j = 0; j<MAX; j++){if (mincount[j]<min&&mincount[j] != 0){flag = j;  min = mincount[j];}}mincount[flag] = 0;cout << "->"<<flag;count += min;for (j = 0; j<MAX; j++)if (graph[flag][j]<mincount[j])mincount[j] = graph[flag][j];}cout <<endl<< count << endl;}void printGraph(){int i, j;cout << '\t';for (i = 0; i<MAX; i++)cout << i << '\t';cout << endl;for (i = 0; i<MAX; i++){cout << i;for (j = 0; j<MAX; j++)cout << '\t' << graph[i][j];cout << endl;}}void GreatGraph(int start, int end, int weight){graph[start][end] = weight;if (flag == 0){graph[end][start] = weight;}}int main(void){int start, end, weight, n, i, begin;init();cout << "请输入(0:无向图 1:有向图):";cin >> flag;cout << "请输入要添加的边数:";cin >> n;for (i = 1; i <= n; i++){cin >> start >> end >> weight;GreatGraph(start, end, weight);}//printGraph();cout << "请输入开始遍历的结点:";cin >> begin;prim(begin);return 0;return 0;}



0 0