AcWing 175 電路維修

2022-09-19 10:39:13 字數 1821 閱讀 1789

達達是來自異世界的魔女,她在漫無目的地四處漂流的時候,遇到了善良的少女翰翰,從而被收留在地球上。

翰翰的家裡有一輛飛行車。

有一天飛行車的電路板突然出現了故障,導致無法啟動。

電路板的整體結構是乙個 \(r\) 行 \(c\) 列的網格(\(r,c≤500\)),如下圖所示。

每個格點都是電線的接點,每個格仔都包含乙個電子元件。

電子元件的主要部分是乙個可旋轉的、連線一條對角線上的兩個接點的短電纜。

在旋轉之後,它就可以連線另一條對角線的兩個接點。

電路板左上角的接點接入直流電源,右下角的接點接入飛行車的發動裝置。

達達發現因為某些元件的方向不小心發生了改變,電路板可能處於斷路的狀態。

她準備通過計算,旋轉最少數量的元件,使電源與發動裝置通過若干條短纜相連。

不過,電路的規模實在是太大了,達達並不擅長程式設計,希望你能夠幫她解決這個問題。

注意:只能走斜向的線段,水平和豎直線段不能走。

輸入檔案包含多組測試資料。

第一行包含乙個整數 \(t\),表示測試資料的數目。

對於每組測試資料,第一行包含正整數 \(r\) 和 \(c\),表示電路板的行數和列數。

之後 4r$ 行,每行 \(c\) 個字元,字元是"/""\"中的乙個,表示標準件的方向。

對於每組測試資料,在單獨的一行輸出乙個正整數,表示所需的最小旋轉次數。

如果無論怎樣都不能使得電源和發動機之間連通,輸出no solution

資料範圍

\(1≤r,c≤500\),

\(1≤t≤5\)

輸入樣例:

1

3 5\\/\\

\\///

/\\\\

輸出樣例:
1
樣例解釋

樣例的輸入對應於題目描述中的情況。

只需要按照下面的方式旋轉標準件,就可以使得電源和發動機之間連通。

把每乙個橫豎交點作為結點,當對角線與電纜重合時,權值為 \(0\),否則為 \(1\)(即旋轉電纜),轉化為從左上角到右小角的最小權值,可利用雙端佇列的bfs,權值為 \(0\) 則進隊首,否則進隊尾,即每次優先擴充套件權值小的,遍歷到終點時可保證最短。另外,需要注意如何用乙個值表示乙個座標保證值不重複

#includeusing namespace std;

const int n=300000;

int t,n,m,d[n];

char g[505][505];

vector> adj[n];

bool vis[n];

void bfs()}}

}int main()

,dy[4]=;

bool v[n][n],st[n][n];

void bfs()

); while(q.size())

);else

q.push_front();}}

}}int main()

bfs();

printf("%d",d[1][1]);

return 0;

}

AcWing 175 電路維修(雙端佇列BFS)

我們可以把電路板上的每個格點 橫線與豎線的交叉點 看作無向圖中的節點。若兩個節點 x xx 和 y yy 是某個小方格的兩個對角,則在 x xx 與 y yy 之間連邊。若該方格中的標準件 對角線 與 x xx 到 y yy 的線段重合,則邊權為 0 00 若垂直相交,則邊權為 1 11 說明需要旋...

175 電路維修 bfs

達達是來自異世界的魔女,她在漫無目的地四處漂流的時候,遇到了善良的少女翰翰,從而被收留在地球上。翰翰的家裡有一輛飛行車。有一天飛行車的電路板突然出現了故障,導致無法啟動。電路板的整體結構是乙個r行c列的網格 r,c 500 如下圖所示。電路.png 每個格點都是電線的接點,每個格仔都包含乙個電子元件...

YBTOJ 電路維修

思路 乍一看這題,沒有bfs的頭緒 但是,我們想到了spfa 我們可以把地圖中的每個點看成方格,這樣就有 n 1 m 1 個方格 如果兩點之間有線聯通,那它們之間的邊權就是0,否則就為1 然後spfa就可以了 include include include using namespace std i...