最小生成樹判斷唯一

2022-05-17 23:02:03 字數 1141 閱讀 6506

題意:若最小生成樹唯一則輸出權值和,若不唯一輸出not 

not unique!

運用prim演算法將最小生成樹求出,然後在依次列舉刪除最小生成樹中的每一條邊,判斷是否還能構成乙個新的最小生成樹,且權值和與初始的權值和相等,若能構成則不唯一

#include#include

#include

using

namespace

std;

/*看了很久才相處為什麼要用這個stl

假設v,u都為最小生成樹中的點,但是

v,u所擴充套件出來的最小生成樹邊卻不一定相等

所以導致陣列下標記錄u,v顯得很不方便,而

vector會將元素加入u,v陣列的末尾所以無需知道

陣列末尾的下標是多少

*/vector

edge[300

];#define inf 99999999

#define max 300

intjudge;

intmap[max][max];

intvis[max];

int prim(int n,int flag)//

這裡的flag是0,1,區別就是計算的最小生成樹是第一次的還是後來列舉的

lowcost[

1]=0

;

for(i=1;i<=n;i++)

}sum+=min;

vis[minid]=1

;

if(flag)

}for (j=1;j<=n;j++)}}

return

sum;

}int

main()

for(i=0;i<=n;i++)

edge[i].clear();

for (i=0;i)

ans=prim(n,1);//

f注意這裡的1

for (int s=1;s<=n;s++)

}if(judge) break

; }

if(judge) printf("

not unique!\n");

else printf("

%d\n

",ans);

}return0;

}

CSU 1541 判斷最小生成樹是否唯一

include include include include includeusing namespace std define n 1000 int fa n vis n n int isok struct point point bool operator bool judge same in...

C 判斷最小生成樹是否唯一演算法

1 最小生成樹是否唯一演算法 給定一無向圖,判斷最小生成樹是否唯一。2 思路 先求出最小生成樹,記錄結果,依次刪除樹中各邊,再求最小生成樹,看與最初結果是否相同,若相同則不唯一。3 實現 include include include include include include include ...

PKU1679判斷最小生成樹是否唯一Prime演算法

原題 本題是判斷最小生成樹是否唯一,可以根據先刪除最小生成樹裡面的邊然後新加入一條邊,然後判斷新生成的最小生成樹的權值和原來是否相同 這就要求要求原來最小生成樹里任意兩個點之間的最大值。include include include include include include include i...