NYOJ 38 最小生成樹

2021-09-08 03:33:10 字數 1005 閱讀 5652

原來是求二維陣列的每行或者每列的最小值,不過需要主要的是如果是4個點,只需要3條邊就可以完全連線起來了,所以只需要找3次就行了。4條邊有一條邊會重複,需要捨棄。

就用題目的測試資料比較,用二維陣列儲存點與點連線的距離。

就用i代表行,j代表列。會發現 i,j都是從第二行開始的。而且跟y=x 直線對稱。為什麼說只要找到每行或者每列的最小值就行了呢。假設最開始沒有2這個點,此時1,3,4就是乙個集合。然後新新增乙個點2進去,此時的最短路徑就是點2到這個集合的最短路徑,然後看2能夠跟集合裡面的哪些點連線,測試資料表示能看出來跟1,3,4都連線,所以找出與1,3,4連線的最小值就行,就能夠構成乙個新的最小生成樹。然後比較過乙個就標記下,不再重複找,接下來**就簡單了。

//因為每個樓都在最小生成樹中,因此無論從哪號樓拉線都沒有區別,所以只要選最小那個值就行

#include#include#include#define inf 0x7fffffff/*就是int_max,四個位元組,共32位,而每四位為乙個十六進製制為,因為存在計算機中為補碼,所以最高四位是0111,即7*/

int map[501][501];//**二維陣列標記地圖**//

bool a[501];

int cmp(const void *a,const void *b)

int main()

for(i=0;imap[i][j]&&!(a[j]==true&&a[i]==true))//**找出最小權值,避免環路**//

}// for(j=2;j<=m;j++)//**為下一次迴圈做準備,重新初始化**//

// a[j]=false;

a[k]=true;

if(min!=inf)

ans=ans+min;//**加上權值**//

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

} printf("%d\n",ans+b[0]);

system("pause");

} return 0;

}

NYOJ 38 佈線問題 最小生成樹

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件 1 把所有的樓都供上電。2 所用電線花費最少 輸入第一行是乙個整數n表示有n組測試資料。n 5 每組測試資料的第一行是兩個整數v,...

nyoj 38 佈線問題(最小生成樹)

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件 1 把所有的樓都供上電。2 所用電線花費最少 輸入第一行是乙個整數n表示有n組測試資料。n 5 每組測試資料的第一行是兩個整數v,...

nyoj 38 佈線問題

nyoj 38 佈線問題 時間限制 1000 ms 記憶體限制 65535 kb難度 4 描述 南陽理工學院要進行用電線路改造,現在校長要求設計師設計出一種佈線方式,該佈線方式需要滿足以下條件 1 把所有的樓都供上電。2 所用電線花費最少 輸入第一行是乙個整數n表示有n組測試資料。n 5 每組測試資...