1. 程式人生 > >CH 2601 - 電路維修 - [雙端佇列BFS]

CH 2601 - 電路維修 - [雙端佇列BFS]

題目連結:傳送門

描述

Ha'nyu是來自異世界的魔女,她在漫無目的地四處漂流的時候,遇到了善良的少女Rika,從而被收留在地球上。Rika的家裡有一輛飛行車。有一天飛行車的電路板突然出現了故障,導致無法啟動。
電路板的整體結構是一個R行C列的網格(R,C≤500),如右圖所示。每個格點都是電線的接點,每個格子都包含一個電子元件。電子元件的主要部分是一個可旋轉的、連線一條對角線上的兩個接點的短電纜。在旋轉之後,它就可以連線另一條對角線的兩個接點。電路板左上角的接點接入直流電源,右下角的接點接入飛行車的發動裝置。


Ha'nyu發現因為某些元件的方向不小心發生了改變,電路板可能處於斷路的狀態。她準備通過計算,旋轉最少數量的元件,使電源與發動裝置通過若干條短纜相連。不過,電路的規模實在是太大了,Ha'nyu並不擅長程式設計,希望你能夠幫她解決這個問題。

輸入格式

輸入檔案包含多組測試資料。第一行包含一個整數 T 表示測試資料的數目。
對於每組測試資料,第一行包含正整數 R 和 C,表示電路板的行數和列數。
之後 R 行,每行 C 個字元,字元是"/"和"\"中的一個,表示標準件的方向。

輸出格式

對於每組測試資料,在單獨的一行輸出一個正整數,表示所需的縮小旋轉次數。
如果無論怎樣都不能使得電源和發動機之間連通,輸出NO SOLUTION。

樣例輸入

1
3 5
\\/\\
\\///
/\\\\

樣例輸出

1

資料範圍與約定

對於40% 的資料,R,C≤5。
對於100% 的資料,R,C≤500,T≤5。

 

題解:

把網格的所有格點(橫豎線交叉的點)看做無向圖的節點,對於一個一個網格,它有兩個對角節點。

假設這兩個對角節點,已經有被方格里的短電線連線起來了,那麼它們之間建立一條權值為 $0$ 的邊;否則就建立權值為 $1$ 的邊。

對於這樣一張邊權只為 $0,1$ 的無向圖,要求 $s \rightarrow t$ 的最短路,可以通過雙端佇列BFS完成。

 

AC程式碼: