1. 程式人生 > >prim 求最小生成樹(鄰接表)

prim 求最小生成樹(鄰接表)

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int INF=0x3f3f3f3f;//無窮數
const int maxn=1e5+5;//最大邊數;
struct ac{//to city
    int v,dis;
};
vector<ac> adj[maxn];//data
int n,dis[maxn];//dis 每個點距當前樹的距離
bool vst[maxn]={false};
int re=0;//最終最小花費
void prime(int
x){ memset(dis, INF, sizeof(dis)); dis[x]=0; for(int i=1;i<=n;i++){//每迴圈一次加入一個,共n次 int u=-1,min=INF; for(int j=1;j<=n;j++){ if(vst[j]==false&&dis[j]<min){ u=j; min=dis[j]; } } vst[u]=true
; re+=min; for(int j=0;j<adj[u].size();j++){ int v=adj[u][j].v; if(vst[v]==false&&adj[u][j].dis<dis[v]){ dis[v]=adj[u][j].dis; } } } } int main(){ cin>>n;int h;ac data; for(int i=1;i<=n;i++){ cin
>>h;//連線到h個城市 for(int j=0;j<h;j++){ cin>>data.v>>data.dis; adj[i].push_back(data); } } prime(1); cout<<re<<endl; } /*//共6個城市,第1個城市連線3個城市,城市n 及 花費 6 3 2 6 3 1 4 5 3 1 6 3 5 5 3 5 1 1 4 5 6 4 5 6 2 5 3 1 5 3 5 6 2 3 3 6 2 3 6 6 3 3 4 4 2 5 6 *///re 15

相關推薦

prim 小生成樹鄰接

#include <iostream> #include <cstring> #include <vector> using namespace std; const

小生成樹鄰接寫法

#include<stdio.h> #include<stdlib.h> #define max 20 typedef struct ArcNode { int adjvex; struct ArcNode *nextarc; int info;

Prim演算法實現小生成樹鄰接矩陣儲存圖

程式碼如下 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int vertex[MAXSIZE]; int edges[MAXSIZE][MAXSIZE];

prim小生成樹

digi etc rhs kruskal getc truct dijk size nod 一直以來只會Kruskal prim和dijkstra很像 只不過prim維護的是最短的邊,而dijkstra維護的是最短的從起點到一個點的路徑 同時prim要註意當前拓展的邊

Kruskal演算法實現小生成樹鄰接矩陣儲存圖

程式碼如下: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int u; int v; int w; }Edges; void Bubblesort(

小生成樹luogu 3366

無向圖 輸出 -o 題目 pac 數據 規模 nbsp 我們 題目描述 給出一個無向圖,求出最小生成樹 輸入輸出格式 輸入格式: 第一行包含兩個整數N、M,表示該圖共有N個結點和M條無向邊。(N<=5000,M<=200000) 接下來M行每行包含三個整數X

poj2075 小生成樹Kruskal模板

Description You are the owner of SmallCableCo and have purchased the franchise rights for a small town. Unfortunately, you lack enough funds to star

小生成樹資料結構

最小生成樹-Prim演算法和Kruskal演算法   Prim演算法 1.概覽 普里姆演算法(Prim演算法),圖論中的一種演算法,可在加權連通圖裡搜尋最小生成樹。意即由此演算法搜尋到的邊子集所構成的樹中,不但包括了連

資料結構實驗之圖論九:小生成樹 SDUT 2144

#include<bits/stdc++.h> using namespace std; typedef long long ll; struct node { int s, e; int w; }s[100005]; int c[105]; bool cmp(str

POJ 2395 Out of Hay 小生成樹prime演算法

題目: 有N(2-2000)個農場,M(1-10000)條通路連通各個農場,長度不超109,要求遍歷全部的農場,且每走1單位長度就要消耗一單位水,每到一個農場可以把自己的水充滿,求最小的水箱容量。 樣例輸入 3 3 1 2 23 2 3 1000 1 3 43 樣例輸

小生成樹 Kruskal演算法POJ 2349 Arctic Network

Description The Department of National Defence (DND) wishes to connect several northern outposts by a wireless network. Two different com

資料結構 第17講 溝通無限校園網——小生成樹kruskal演算法

本內容來源於本人著作《趣學演算法》,線上章節:http://www.epubit.com.cn/book/details/4825 構造最小生成樹還有一種演算法,Kruskal演算法:設G=(V,E)是無向連通帶權圖,V={1

HDU 1162.Eddy's picture【小生成樹Kruskal演算法】【5月30】

Eddy's picture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8871    Accepte

51nod 1212 無向圖小生成樹Kruskal演算法

 收藏  關注 N個點M條邊的無向連通圖,每條邊有一個權值,求該圖的最小生成樹。 Input 第1行:2個數N,M中間用空格分隔,N為點的數量,M為邊的數量。(2 <= N <= 1000, 1 <= M <= 5

洛谷Oj-短網路 Agri-Net-小生成樹模板題

問題描述: 約翰已經給他的農場安排了一條高速的網路線路,他想把這條線路共享給其他農場。為了用最小的消費,他想鋪設最短的光纖去連線所有的農場。 你將得到一份各農場之間連線費用的列表,你必須找出能連線所

【POJ 3241】曼哈頓小生成樹模板整理

關於 曼哈頓最小生成樹 的證明見:http://www.2cto.com/kf/201505/399861.html 模板: #include<cmath> #include<cstdio> #include<cstring> #incl

P3366 【模板】小生成樹boruvka/sollin

int fin targe http strong 合並操作 tdi 一個 ble P3366 【模板】最小生成樹 boruvka/sollin 復雜度$O(mlogn)$ 簡要說明一下過程 引入一個數組$link[i]$表示連通塊$i$下一步可更新的最短的邊的編號

c++資料結構與演算法之圖:鄰接矩陣、深度廣度遍歷、構造小生成樹prim、kruskal演算法

//圖的鄰接矩陣實現 //廣度遍歷bfs和深度遍歷dfs //構造最小生成樹的prim、kruskal演算法 #include <iostream> #include<stack> #include<queue> #define WEI

小生成樹Prim算法和Kruskal算法

under net 任務 合並 一個 心算 std fin details 1)最小生成樹 給定一個無向圖,如果它的某個子圖中任意兩個頂點都互相連通並且是一棵樹,那麽這棵樹就叫生成樹。如果邊上有權值,那麽使得邊權和最小的生成樹叫做最小生成樹(MST,Minimum Span

P3366 【模板】小生成樹堆優化prim

生成 operator prior 鄰接表 %d inline pac ont truct 堆優化prim 復雜度大概O(nlogn) #include<cstdio> #include<cstring> #include<queu