ZJU-1084

此題數據很奇怪,按理說應該是掃描出的輸入數據應爲對稱矩陣,但是好像可能不是,所以錄入數據的時候請自行對稱一下。

WA了很多次,最後還是蠻過了,稀裏糊塗的一道題。

 

不過算法抽象的不錯,以下面的數據爲例

【例1

 

6

A:BEF

B:AC

C:BD

D:CEF

E:ADF

F:ADE

 

 

每兩個字母的聯通與否用二維圖來表示如下

 

1 1 0 0 1 1

1 1 1 0 0 0

0 1 1 1 0 0

0 0 1 1 1 1

1 0 0 1 1 1

1 0 0 1 1 1

 

現在開始處理,把粗體的位和同行對角線位相加,然後消去最大的一行一列

1 1 0 0 1 1

1 1 1 0 0 0

0 1 1 1 0 0

0 0 1 1 1 1

1 0 0 1 1 1

1 0 0 1 1 1

 

得到如下,然後繼續

2 1 0 0 1

1 1 1 0 0

0 1 1 1 0

0 0 1 2 1

1 0 0 1 2

 

3 1 0 0

1 1 1 0

0 1 1 1

0 0 1 3

 

3 1 0

1 1 1

0 1 2

 

直到變成二維,此時如果對角線兩個數字相等,而且(1,1)位爲1,說明最後的兩個字母聯通且需要添加頻道來間隔

如果數字不等,那麼OK,取大的就行,然後在對角線上掃描一遍,看是否有更大的數字,如果有,作爲結果,如果沒有,不管。

3 1

1 2

 

所以結果是:

3 channels needed.

 

【例2

 

4

A:BC

B:ACD

C:ABD

D:BC

 

 

 

 

1 1 1 0

1 1 1 1

1 1 1 1

0 1 1 1

 

1 1 1 0

1 1 1 1

1 1 1 1

0 1 1 1

 

1 1 1

1 2 1

1 1 2

 

2 1

1 3

 

3 channels needed.

 

【例3

 

4

A:BCD

B:ACD

C:ABD

D:ABC

 

 

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

 

1 1 1 1

1 1 1 1

1 1 1 1

1 1 1 1

 

2 1 1

1 2 1

1 1 2

 

3 1

1 3

 

4 channels needed.

 

【例4

 

10 

A:BC 

B:A 

C:A 

D:G 

E:HJ 

F:I 

G:DHI 

H:EGJ 

I:FGJ 

J:EHI 

 

 

1 1 1 0 0 0 0 0 0

1 1 0 0 0 0 0 0 0

1 0 1 0 0 0 0 0 0

0 0 0 1 0 0 1 0 0

0 0 0 0 1 0 0 1 0

0 0 0 0 0 1 0 0 1

0 0 0 1 0 0 1 1 1

0 0 0 0 1 0 1 1 0

0 0 0 0 0 1 1 0 1

0 0 0 0 1 0 0 1 1

 

1 1 1 0 0 0 0 0 0

1 1 0 0 0 0 0 0 0

1 0 1 0 0 0 0 0 0

0 0 0 1 0 0 1 0 0

0 0 0 0 1 0 0 1 0

0 0 0 0 0 1 0 0 1

0 0 0 1 0 0 1 1 1

0 0 0 0 1 0 1 1 0

0 0 0 0 0 1 1 0 1

0 0 0 0 1 0 0 1 1

 

1 1 1 0 0 0 0 0 0

1 1 0 0 0 0 0 0 0

1 0 1 0 0 0 0 0 0

0 0 0 1 0 0 1 0 0

0 0 0 0 2 0 0 1 0

0 0 0 0 0 1 0 0 1

0 0 0 1 0 0 1 1 1

0 0 0 0 1 0 1 2 0

0 0 0 0 0 1 1 0 2

 

1 1 1 0 0 0 0 0

1 1 0 0 0 0 0 0

1 0 1 0 0 0 0 0

0 0 0 1 0 0 1 0

0 0 0 0 2 0 0 1

0 0 0 0 0 2 0 0

0 0 0 1 0 0 2 1

0 0 0 0 1 0 1 2

 

1 1 1 0 0 0 0

1 1 0 0 0 0 0

1 0 1 0 0 0 0

0 0 0 1 0 0 1

0 0 0 0 3 0 0

0 0 0 0 0 2 0

0 0 0 1 0 0 3

 

1 1 1 0 0 0

1 1 0 0 0 0

1 0 1 0 0 0

0 0 0 2 0 0

0 0 0 0 3 0

0 0 0 0 0 2

 

1 1 1 0 0

1 1 0 0 0

1 0 1 0 0

0 0 0 2 0

0 0 0 0 3

 

1 1 1 0

1 1 0 0

1 0 1 0

0 0 0 2

 

1 1 1

1 1 0

1 0 1

 

2 1

1 1

 

3 channels needed.

 

 

程序如下,還是和以前一樣,請準備一個1084.txt作爲標準輸入源,演算過程可以通過打開對printM()的註釋得到。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章