最小生成樹之Prim演算法(模板)

2021-06-22 13:27:29 字數 568 閱讀 2842

直接上**:

// poj  1258

#include #include #define inf 0x3f3f3f3f

#define maxn 517

//建立m二維陣列儲存圖表,low陣列記錄每2個點間最小權值,visited陣列標記某點是否已訪問

int m[maxn][maxn], low[maxn], visited[maxn];

int n;

int prim( )

}result += minn; //最小權值累加

visited[pos] = 1; //標記該點

for(j = 1; j <= n; j++) //更新權值

if(visited[j]==0 && low[j]>m[pos][j])

low[j] = m[pos][j];

}return result;

}int main()

ans=prim( );

printf("%d\n",ans);

}return 0;

}

最小生成樹 Prim演算法(模板)

基本演算法 首先以乙個結點作為最小生成樹的初始結點,然後以迭代的方式找出與最小生成樹中各結點權重最小邊,並加入到最小生成樹中。選擇一條權值最小,且一端點a已加入生成樹,另一端點b在剩餘結點集內的邊作為最小生成樹上的邊,同時將b列入生成樹的已有點集中。當所有結點都加入到最小生成樹中之後,就找出了連通圖...

最小生成樹prim演算法模板

include using namespace std const int inf 0x3f3f3f3f 最大值,方便計算 int n,m n是點的個數,m是邊的數量 int dis 105 vis 105 dis是判斷未加入生成樹的頂點到已知生成樹的最短距離,vis判斷是否已經加入生成樹 int ...

模板) 最小生成樹Prim演算法

演算法跟dijkstra很像 但是要特別注意兩點 1.最好使用乙個額外的陣列來保證每個點只被訪問一次,否則的話應該保證在35行處使用e.dis dis e.num 而不僅是 否則會造成一些相等的額外相加。2.40行的地方要注意與dijkstra的區別!不是加而是直接換!include include...