[英]Graph Theory : Will it stop or not?
我不知道如何開始這個問題:
一個圖形有n個頂點和m個邊,兩個邊之間的連接不能超過一個邊,Rahul開始玩游戲:他按照以下方式更改邊-
僅當它們在每兩個頂點之間存在直接邊緣時,該游戲才會停止。 您需要確定是否有可能完成此游戲,或者無論他采取什么行動,這種情況是否永遠不會發生。
輸入:將給出圖形的初始狀態。 輸出:“是”或“否”
有人可以提示如何開始嗎?
1)動作順序無關緊要(因為您可以將任意兩個后續動作交換為相同的結果);
2)具有相同頂點的兩個后續更改的效果為零;
3)您可以進入最終狀態iff。 您可以不超過一次地更改任何頂點;
4)任何兩個連接的頂點都必須同時更改或不變,其中兩個未完全連接的頂點都應更改。
在圖中選取一個連接的組件。 那里的頂點應該全部更改或全部保持不變。 如果組件未完全連接,則無法完成游戲。 如果至少有三個連接的組件,則不可能完成游戲。 如果完全有兩個完全連接的組件,則應更改其中一個恰好所有的頂點。
答:僅當圖形已經完全連接或由兩個完全連接的組件組成時,游戲才能結束。 (很容易看出,當圖形由兩個完全連接的組件組成時,更改頂點會有效地將其從一個組件移動到另一個組件。)
檢查答案的算法:假設我們給定了多個頂點n,然后給出了形式為(a,b)
的邊列表,其中a
和b
是來自[1,n]的頂點數。 令vertices
為記錄數組(num_edges, connected, sample)
,並以(0,k,k)
初始化( k
為頂點數)。 然后對於每個邊(A,B):
num_edges
增加1
; A.sample
等於B.sample
,則轉到下B.sample
邊; A.connected
和B.connected
,從開始A.connected
頂點組sample
,以A.sample
並按照connected
直到到達B; 到達下一個優勢。 最后,檢查從1
開始並隨后connected
所有頂點的num_edges
等於(其數字-1),並且所有其余頂點的循環相似。 時間應為O(max(n log(n),m)),內存為O(n)。
具有n個頂點的已求解圖將是具有½n(n-1)個邊的完整圖k n 。
翻轉頂點的狀態將意味着頂點與圖形斷開連接,並且存在兩個斷開連接的完整子圖K 1和K (n-1) ,其中分別包含0和½(n-1)(n-2)邊緣。
翻轉其他頂點的狀態會將每個頂點與包含它的完整子圖斷開連接,並將其連接到另一個完整子圖的所有頂點。 因此,通常,如果存在x個具有翻轉狀態的頂點,則將存在兩個完整的子圖K x和K (nx) ,其邊緣為½x(x-1)和½(nx)(n-1-x)總共有m =½n(n-1)-nx + x(x-1)個邊。
如果我們知道m和n,那么我們可以求解二次方程,以找到解決問題所需的移動次數x :
x = ( n - SQRT( 4m + 2n - n² ) ) / 2
如果x為非整數,則難題無法解決。
如果x是整數,則難題可能恰好可以在x步中解決,但是還需要進行額外的檢查,以查看是否存在兩個斷開的完整子圖K x和K (nx) 。
算法 :
x
; 如果它不是整數,則該圖不可解。 [復雜度: O(1)
] (x-1)
或(nx-1)
; 如果不是,則該圖不可解。 O(n)
] O(n+m)
] 例子 :
邊為(1,2)
和(3,4)
為n=4,m=2
的圖是可解的,因為x =(4-SQRT(0))/ 2 = 2 (是整數),並且有兩個K 2斷開的子圖。
邊(1,2)
, (2,3)
, (3,4)
n=4,m=3
的圖具有x =(4-SQRT(4))/ 2 = 1 (是整數)當只有兩個斷開的K 1和K 3子圖時,它只是一個不連通的不完整圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.