最小生成树

Posted 让自己不再小小的

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小生成树相关的知识,希望对你有一定的参考价值。

zznu 1983
最小生成树的变形,关键是想不到,想到也就不会觉得难了
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<cctype> #include<algorithm> #include <vector> #include <queue> using namespace std; #define INF 0x3f3f3f3f #define N 500 int maps[N][N]; int dist[N], vis[N]; void Init(int n) { for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) maps[i][j]=i==j ? 0 : INF; } int Prim(int n) { for(int i=1; i<=n; i++) dist[i]=maps[0][i]; memset(vis, 0, sizeof(vis)); vis[0]=1; int sum=0, Min, index; while(1) { Min=INF; for(int i=0; i<=n; i++) if(!vis[i]&&Min>dist[i]) { Min=dist[i]; index=i; } if(Min==INF) break; sum+=Min; vis[index]=1; for(int i=0; i<=n; i++) if(!vis[i]&&maps[index][i]<dist[i]) dist[i]=maps[index][i]; } return sum; } int main() { int T, n; scanf("%d", &T); while(T--) { scanf("%d", &n); Init(n); for(int i=0; i<=n; i++) for(int j=1; j<=n; j++) scanf("%d", &maps[i][j]); int ans=Prim(n); printf("%d\n", ans); } return 0; }

 

以上是关于最小生成树的主要内容,如果未能解决你的问题,请参考以下文章

最小生成树matlab代码Kruskal算法,用于二维网络生成

c语言最小生成树

最小生成树及Prim算法及Kruskal算法的代码实现

数据结构 图连通与最小生成树

次最小生成树 模版

图的最小生成树算法(图解+代码)| 学不会来看我系列