題:有 n 個瓶子,編號 1∼n,放在架子上。
比如有 5 個瓶子:
2 1 3 5 4
要求每次拿起 2 個瓶子,交換它們的位置。
經過若干次後,使得瓶子的序號為:
1 2 3 4 5
對於這麼簡單的情況,顯然,至少需要交換 2 次就可以復位。
如果瓶子更多呢?你可以通過程式設計來解決。
本題思路比較精巧,需要用圖論來求解。
將每個瓶子向它應該在的位置的瓶子連一條邊,這樣就會形成k個環。最終我們要得到到的是n個環,所以需要n-k次操作。
AcWing 1224 交換瓶子
tags 置換群 圖論目錄1 2345 3125 4每乙個點都有屬於他的環。交換操作 某點的出度,會指向和他交換的點的下標 所以最少要交換的次數,就是每次都讓環內的點交換 for int j i st j j b j b b j 某一點下標對應的值,當成另外乙個的下標 b j 某一點下標對應的值 i...
1224 交換瓶子
有 n 個瓶子,編號 1 n 放在架子上。比如有 5 個瓶子 2 1 3 5 4要求每次拿起 2 個瓶子,交換它們的位置。經過若干次後,使得瓶子的序號為 1 2 3 4 5對於這麼簡單的情況,顯然,至少需要交換 2 次就可以復位。如果瓶子更多呢?你可以通過程式設計來解決。第一行包含乙個整數 n 表示...
藍橋 交換瓶子
交換瓶子 有n個瓶子,編號 1 n,放在架子上。比如有5個瓶子 2 1 3 5 4要求每次拿起2個瓶子,交換它們的位置。經過若干次後,使得瓶子的序號為 1 2 3 4 5 對於這麼簡單的情況,顯然,至少需要交換2次就可以復位。如果瓶子更多呢?你可以通過程式設計來解決。輸入格式為兩行 第一行 乙個正整...