prim 樸素 最小生成樹
#include <bits/stdc++.h>
using namespace std;
const int N = 510;
int grid[N][N];
int st[N];
int dis[N];
int n, m;
int prim()
{
memset(st, 0, sizeof st);
memset(dis, 0x3f, sizeof dis);
int res = 0;
for (int i = 0; i < n; ++i) {
int t = -1; //記錄當前未加入集合的點中離集合最近的點
for (int j = 1; j <= n; ++j) {
if (st[j] == 0 and (t == -1 or dis[t] > dis[j]))
//先判斷是否在集合內部
t = j;
}
//i = 0 時,集合為空,所有dis都為無窮大,此時會選取1節點加入集合中,再用它更新自己和相鄰節點的dis,
//所以i = 0 時不能判斷dis[t] 和 累加 res;
if (i and dis[t] == 0x3f3f3f3f)
return 0;
if (i) res += dis[t];
st[t] = true;
for (int j = 1; j <= n; ++j) {
dis[j] = min(dis[j], grid[t][j]);
}
}
return res;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("D:/VS CODE/C++/in.txt", "r", stdin);
freopen("D:/VS CODE/C++/out.txt", "w", stdout);
#endif
cin >> n >> m;
memset(grid, 0x3f, sizeof grid);
for (int i = 0; i < m; ++i) {
int a, b, w;
cin >> a >> b >> w;
grid[a][b] = grid[b][a] = min(grid[a][b], w); //可能存在重邊
if (a == b)
grid[a][b] = 0; //避免錄入自環
}
int res = prim();
if (res) {
cout << res;
}
else {
cout << "impossible";
}
fclose(stdin);
fclose(stdout);
return 0;
}
相關文章
- Prim 最小生成樹 圖解圖解
- 最小生成樹__Prim演算法演算法
- 最小生成樹之 Prim 演算法演算法
- 最小生成樹prim普里姆演算法演算法
- 圖論之帶權圖「最小生成樹之Prim」圖論
- 最小生成樹-Prim演算法和Kruskal演算法演算法
- 最小生成樹:Kruskal演算法和Prim演算法演算法
- 最小生成樹——Prim演算法和Kruscal演算法演算法
- 圖論之帶權圖「最小生成樹prim的優化」圖論優化
- 資料結構------最短路徑Dijkstra和最小生成樹Prim資料結構
- 圖論之帶權圖「最小生成樹prim的最佳化」圖論
- 最小生成樹的性質與prim演算法(C++實現)演算法C++
- 最小生成樹
- 【JAVA演算法】圖論演算法 --求最小生成樹Prim演算法Java演算法圖論
- 【模板】最小生成樹
- 最小度限制生成樹
- 【模板】最小生成樹-kruskal
- 最小生成樹專項
- 圖論 最小生成樹圖論
- 圖的最小生成樹
- 【圖論】最小生成樹圖論
- 最小生成樹,Prim演算法與Kruskal演算法,408方向,思路與實現分析演算法
- 演算法基礎 第5版 第四章 最小生成樹Prim方法的Ruby實現演算法
- 最小生成樹學習筆記筆記
- Networking POJ - 1287(kuangbin最小生成樹)
- 專題六 最小生成樹【Kuangbin】
- 最小生成樹的演算法演算法
- 最小生成樹__Kurskal演算法演算法
- 樸素貝葉斯模型模型
- 演算法-圖論-最小生成樹演算法圖論
- NOIP 複習題之最小生成樹
- 【演算法學習】最小生成樹演算法
- 一些“最小生成樹”板題
- UVA1379——Slim Span (最小生成樹)
- 樸素貝葉斯分類
- ML-樸素貝葉斯
- 樸素貝葉斯和半樸素貝葉斯(AODE)分類器Python實現Python
- bzoj3545: [ONTAK2010]Peaks(主席樹+最小生成樹)