基本概念要求
1.不成环(就是不是首位相连,可以形成一个连接闭合的图形)
2.连通(就是每个点在不成环的前提下都可以连起来,像贪吃蛇)
最小生成树是什么?
最小生成树就是由几个点,和几条边构成的树,由因为最小,所以在调边的时候各边的和应该是最小的。
最小边原则
图中权值最小的边(如果唯一)一定在最小生成树上。
算法:
Prim算法
如何实现这个代码?
- 首先找到两个点,然后由这两个点分片(就像地主画土地一样)
- 然后由这两个点出发,进行点之间的相连,然后在连得时候比较边的数值,选择最小的那个。 最后两块再连在一起。
- 最后检查是否由n-1个边构成的树,没有不成立最小生成树。(n代表n个点)
代码:
#include <iostream>
using namespace std;
const int INF=0x3f3f3f3f;
int vst[505]; //标记顶点是否加入其中
int d[505]; //表示边的最小的时候
int g[505][505];
int n,m,ans=0;
void Read() //读入数据
{
int i,j,x,y,w;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) g[i][j]=INF; //取极大值不会超
for(i=1;i<=m;i++)
{
cin>>x<