最小生成樹 水題集

2021-06-22 17:55:48 字數 2409 閱讀 6258

先說求無向圖最小生成樹的兩種演算法:

①prim演算法

1.初始時兩個集合v,e,初始時v為空,e是所有點的集合。

2.以圖中任意乙個點為起始點,把這點加入集合v,然後從集合e中刪除,然後更新這個點到其它點的距離,如果更新不到的點,那麼之間的距離為無窮大。

3.然後挑選離起始點最近的點,把這點加入集合v,然後從集合e中刪除(有多個的話任選乙個),然後更新  新加入的點  到其它點的距離,然後再找出乙個距離這個集合最近的點(這個距離最近的點可能離起始點最近)。

4.然後重複上面的步驟,直至路被更新完或e為空,如果e不為空,說明圖不連通。

②克魯斯卡爾演算法

1.將兩點之間的距離排序

2.每次從中選出距離最短的兩點,判斷這兩點所在的集合是否聯通。

3.如果聯通,繼續步驟2;如果不連通,將兩點合併為乙個集合,繼續步驟2

4.直至所有點都聯通,或路徑判斷完畢

其中稠密圖適合用prim,稀疏圖適合用克魯斯卡爾。

兩個演算法的基礎都是貪心演算法,下面的水題,練練手。。。

hdu  1102  constructing roads

題目大意:給你乙個矩陣map,其中map[i][j]表示從i到j的花費,給你多次詢問,輸出詢問的兩點之間聯通的最小花費

**如下:

#include#include#includeusing namespace std;

#define maxint 0x3f3f3f3f

#define n 110

int map[n][n],visit[n],low[n];

int n,m;

int prim()

return sum;

}int main()

scanf("%d",&m);

int a,b;

for(int i=1;i<=m;i++)

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

}return 0;

}

hdu  1863  暢通工程

題目大意:中文題,不解釋

**如下:

#include#include#includeusing namespace std;

#define maxint 0x3f3f3f3f

#define n 110

int n,m,rank,map[n][n],sum,f[n];

//克魯斯卡爾

struct point//結構體的初始化

}s[n];

bool cmp(point a,point b)

return 0;

}

hdu  1875   暢通工程再續

**如下:

#include#include#include#includeusing namespace std;

#define maxint 0x3f3f3f3f

#define n 110

//prim

int visit[n],n;

double low[n],map[n][n];

struct points[n];

void init()//初始化

return sum;

}double s(point a,point b)//兩座標之間距離

int main()

double ans=prim();

if(ans==-1) printf("oh!\n");

else printf("%.1lf\n",ans);

}return 0;

}

hdu  1879  繼續暢通工程

**如下:

#include#include#include#includeusing namespace std;

#define maxint 0x3f3f3f3f

#define n 110

//prim

struct points[100005]; //注意s的範圍

int visit[n],n,low[n],map[n][n];

void init()

return sum;

}int main()

}int prim()

return sum;

}int main()

for(int i=1;i<=k;i++)

s[100005];

bool cmp(point a,point b)

void init()

{ sum=0;

memset(visit,0,sizeof(visit));

for(int i=0;i關於有向圖的最小生成樹,應該是最小樹形圖,會在接下來整理。。。

最小生成樹(入門題)

time limit 1000ms memory limit 65536k 有疑問?點這裡 有n個城市,其中有些城市之間可以修建公路,修建不同的公路費用是不同的。現在我們想知道,最少花多少錢修公路可以將所有的城市連在一起,使在任意一城市出發,可以到達其他任意的城市。輸入包含多組資料,格式如下。第一行...

並查集(最小生成樹)

時間限制 1000 ms 記憶體限制 65536 kb 題目描述 有一張城市地圖,圖中的頂點為城市,無向邊代表兩個城市間的連通關係,邊上的權為在這兩個城市之間修建高速公路的造價,研究後發現,這個地圖有乙個特點,即任一對城市都是連通的。現在的問題是,要修建若干高速公路把所有城市聯絡起來,問如何設計可使...

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...