最小生成樹 poj1758

2021-06-17 20:04:23 字數 1126 閱讀 7756

題意:

用乙個7位的string代表乙個編號,兩個編號之間的distance代表這兩個編號之間不同字母的個數。乙個編號只能由另乙個編號「衍生」出來,代價是這兩個編號之間相應的distance,現在要找出乙個「衍生」方案,使得總代價最小,也就是distance之和最小。

例如有如下4個編號:

aaaaaaa

baaaaaa

abaaaaa

aabaaaa

顯然的,第二,第三和第四編號分別從第一編號衍生出來的代價最小,因為第二,第三和第四編號分別與第一編號只有乙個字母是不同的,相應的distance都是1,加起來是3。也就是最小代價為3。

問題可以轉化為最小代價生成樹的問題。因為每兩個結點之間都有路徑,所以是完全圖。

此題的關鍵是將問題轉化為最小生成樹的問題。每乙個編號為圖的乙個頂點,頂點與頂點間的編號差即為這條邊的權值,題目所要的就是我們求出最小生成樹來。這裡我用prim演算法來求最小生成樹。

這幾天老犯些低階錯誤,這道題,找不同的個數是,變數放在了外面,致使初始化錯誤,wa了n遍。

**如下:

#include#include#include#include#include#includeusing namespace std;

string truct[2005];

int map[2005][2005];

int dis[2005];

int n;

void prim()

int k;

int result=0;

for(int i=2; i<=n; i++)

}//memset(map,int_max,sizeof(map));

prim();

}return 0;

}

POJ 1258 最小生成樹

include include struct fiberfiber 10000 struct farmsfarms 100 void exchange struct fiber fiber,int i,int j int partition struct fiber fiber,int p,int ...

最小生成樹 poj 2485

include include include include include include define m 505 define im 505 505 2 using namespace std int r im int w im int u im int v im int p m int c...

poj1679 最小生成樹

題目大意 判斷是否存在最小生成樹。如果存在,判斷其是否唯一。用prim演算法求最小生成樹。將其中的每一條邊依次替換,權值是否和最小生成樹相同。如果相同,則最小生成樹不唯一。如果都不相同,則唯一。這個prim的模板比較好,可以再求最小生成樹的同時直接進行判斷唯一性。如下 include include...