Skip to content

Commit 9760df8

Browse files
authored
Update 最小生成树.cpp
1 parent 1840381 commit 9760df8

File tree

1 file changed

+81
-4
lines changed

1 file changed

+81
-4
lines changed

第四章/最小生成树.cpp

Lines changed: 81 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,87 @@
1-
#include<iostream>
1+
#include <iostream>
22
using namespace std;
3-
/* coded by zzx */
4-
/* 这题和上一题一样只有一个用例并且还就是示例,所以直接偷鸡 */
3+
#define MAX 100
4+
/* coded by zzx 4.3 由于oj系统无法登录故没有针对oj上的测试用例测试,只是自己测试了一下,输入输出格式等都需要再更改 */
5+
6+
class Graph
7+
{
8+
public:
9+
int G[6][6];
10+
Graph(int num);
11+
int prim(int num);
12+
};
13+
14+
Graph::Graph(int num)
15+
{
16+
for (int i = 0; i < num; i++)
17+
{
18+
for (int j = 0; j < num; j++)
19+
{
20+
this->G[i][j] = MAX;
21+
}
22+
}
23+
int n;
24+
cin >> n;
25+
int x, y, weight;
26+
for (int i = 0; i < n; i++)
27+
{
28+
cin >> x >> y >> weight;
29+
this->G[x][y] = weight;
30+
this->G[y][x] = weight;
31+
}
32+
}
33+
34+
int Graph::prim(int num)
35+
{
36+
int sum = 0,
37+
min = MAX,
38+
minid = 0;
39+
// int g[num][num] = this->G;
40+
int lowcost[num]; // lowcost[i]即表示起点到第i个点的最短路径
41+
int mst[num]; // mst[i]表示最小生成树中第i个结点的前驱结点
42+
for (int i = 1; i < num; i++)
43+
{
44+
//将第一个结点作为最小生成树的根节点
45+
lowcost[i] = this->G[0][i];
46+
mst[i] = 0;
47+
}
48+
mst[0] = 0;
49+
for (int i = 1; i < num; i++)
50+
{
51+
/* 找出n-1个点,所以从1循环到n-1 *
52+
* 不断循环找出每个点的最短路径 */
53+
min = MAX;
54+
minid = 0;
55+
for (int i = 1; i < num; i++)
56+
{
57+
if (lowcost[i] < min && lowcost[i] != 0)
58+
{
59+
60+
min = lowcost[i];
61+
minid = i;
62+
}
63+
}
64+
sum += min;
65+
lowcost[minid] = 0; //找到了最小的结点,将其放入最小生成树中
66+
for (int i = 1; i < num; i++)
67+
{
68+
//
69+
if (this->G[minid][i] < lowcost[i])
70+
{
71+
lowcost[i] = this->G[minid][i];
72+
mst[i] = minid;
73+
}
74+
}
75+
}
76+
return sum;
77+
}
578

679
int main()
780
{
8-
cout<<19
81+
int num;
82+
cin >> num;
83+
Graph *g = new Graph(num);
84+
int w = g->prim(num);
85+
cout << "最小生成树的权值和为" << w << endl;
986
return 0;
1087
}

0 commit comments

Comments
 (0)