解法
若一圖形為tree的結構,表示此圖形中所有的點都互相連通且必無cycle存在,因此判斷cycle的存在是本題最重要的關鍵。一個判斷有無cycle存在的簡單方法是利用集合的概念,把目前已知的連線關係歸類到同一個集合中,我們設計一個範例來逐步解釋這個過程:
Input
1 2
2 3
4 6
2 5
2 4
5 6
0 0
首先我們假設所有的點都不在任何一個集合中。
第一個輸入:1 2,代表1指向2,所以我們把1與2歸類成集合I。
第二個輸入:2 3,表示2指向3,所以3也屬於集合I。
第三個輸入:4 6,表示4指向6,所以4與6屬於另一個集合II
下一個輸入:2 5,所以5也屬於集合I。
下一個輸入:2 4,所以包含4的這個集合內的全部元素都應該歸類到集合I。
最後一個輸入:5 6,表示5指向6,但是5與6已經屬於同一個集合,將同一個集合內的兩個點連起來必然會形成cycle,因此這個圖形不是tree。
若所有的輸入處理完後,所有的點都屬於同一個集合,則這個圖形就是一個tree。
若一圖形為tree的結構,表示此圖形中所有的點都互相連通且必無cycle存在,因此判斷cycle的存在是本題最重要的關鍵。一個判斷有無cycle存在的簡單方法是利用集合的概念,把目前已知的連線關係歸類到同一個集合中,我們設計一個範例來逐步解釋這個過程:
Input
1 2
2 3
4 6
2 5
2 4
5 6
0 0
首先我們假設所有的點都不在任何一個集合中。
第一個輸入:1 2,代表1指向2,所以我們把1與2歸類成集合I。
第二個輸入:2 3,表示2指向3,所以3也屬於集合I。
第三個輸入:4 6,表示4指向6,所以4與6屬於另一個集合II
下一個輸入:2 5,所以5也屬於集合I。
下一個輸入:2 4,所以包含4的這個集合內的全部元素都應該歸類到集合I。
最後一個輸入:5 6,表示5指向6,但是5與6已經屬於同一個集合,將同一個集合內的兩個點連起來必然會形成cycle,因此這個圖形不是tree。
若所有的輸入處理完後,所有的點都屬於同一個集合,則這個圖形就是一個tree。
留言
張貼留言