codevs 1003 電話連線

2021-07-28 00:12:19 字數 1147 閱讀 3071

拿到這個題,看到說要用prim演算法,感覺是個模板題,不過好像自己也沒怎麼寫過關於最小生成樹的題目,就嘗試著自己寫乙個prim演算法吧。基本思路是in[i]維護每個i是否在生成樹裡面,用優先順序佇列儲存邊struct,過載小於運算子,但是不知道為什麼就是wa了。。現在也還沒相通。

然後就去看題解了,不過確實是在下輸了,別人40幾行的**就可以搞定了,我70幾行的**還wa了。有時候漂亮的解法都可以把**寫得非常的簡潔漂亮,在下受教了。

#include

int e[101][101],ans,book[101],fa[101],dis[101],que[101],count,n;

//count記錄已經選擇了多少條邊

//fa[que[i]]表示第i個加入生成樹的點的老爹,i和i的老爹也就是我們要輸出的邊

int inf=99999999;

int main()

book[1]=1; //book陣列標記每個點是否已經加入生成樹

for (int x=1; xint min=inf,u;

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

if (book[i]==0 && dis[i]//que表示依次加入的點,也就是要按序輸出的點

que[count]=i; //新加入該生成樹的點

}ans += min;

book[u] = 1; // u這個點加入了生成樹

if(min!=0 && min!=inf)

count++;//當前選擇的新加入的點i是題目事先未連線的**線,才把count++,表示新加入的邊

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

if (book[i] == 0 && e[u][i] < dis[i]) //距離更小了

}printf("%d\n",count);

for (int i=0; iif (fa[que[i]]printf("%d %d\n",fa[que[i]],que[i]);

else

printf("%d %d\n",que[i],fa[que[i]]);

printf("%d",ans);

return

0;}

4.今天已經連續被好多道題打擊了,腰有點酸,但還是要堅持下去,不畏挫折和艱難。

Code Vs 1003 電話連線

比較水的題目,裸prim.下面 寫得有點麻煩.僅供參考.其實不用寫那麼多記錄.我是蒟蒻.qaq include include include include include include include includeusing namespace std const int m 105 con...

codevs 1003 電話連線

題解 prim 分析 從輸出要求中就可以看出本題是prim演算法求最小生成樹,所以,只需要實現就可以了。那麼,我們來回顧一下prim演算法 1.設有2個集合v1,v2 預設有5個點 2.在圖中找到離當前第乙個點最近的點,我們假設是2,然後用2去鬆弛每一條邊 3.重複第2步直到迴圈n 1次 那麼題目就...

Codevs 1003 電話連線

時間限制 1 s 空間限制 128000 k 題目等級 gold description 乙個國家有n個城市。若干個城市之間有 線連線,現在要增加m條 線 線當然是雙向的了 使得任意兩個城市之間都直接或間接經過其他城市有 線連線,你的程式應該能夠找出最小費用及其一種連線方案。輸入描述 input d...