電路維修 雙端佇列bfs

2021-08-26 11:59:11 字數 1349 閱讀 3200

傳送門:洛谷p2243

初步判斷,是道最短路的題.

首先就是建圖了,對於電路板上的每一對角線,令與讀入方向相同的路徑邊權為0,方向相反的邊權為1.

由於只能走斜線,根據網格圖的性質可知橫縱座標之和為奇數的點是到不了的,預設起點為(0,

0)(0, 0)

(0,0

),對此,可以去掉一半的邊(根本就到不了),同時也可以直接判斷無解的情況

跑圖的話,dijkstra + heap,和經過優化的spfa(關於spfa,他$ \cdots $)應該是能過的,但由於邊權只有0和1,所以只要考慮用雙端佇列的bfs,即可(類似於spfa的slf優化), 若邊權為1,則將其放入隊尾,否則置於隊首,要注意的是,乙個點可能多次入隊

#include

#include

#include

#include

#define il inline

using

namespace std;

il int

read()

int to[

502005

], nxt[

502005

], val[

502005];

int last[

251005];

int cnt;

il void

add(

int u,

int v,

int w)

int s, t;

int n, m;

int dis[

251005];

il int

turn

(int x,

int y)

il void

bfs(

int u)

for(

;!q.

empty()

;)if(

!val[i]

) q.

push_front

(v);

else q.

push_back

(v);}}

}int

main()

if((n + m)&1

) s =

1; t =

turn

(n, m)

;bfs

(s);

}return0;

}

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

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

電路維修 (廣搜變形 雙端佇列)

題目 這道題做法挺多的,洛谷上有好多,但是都需要將該迷宮轉換為一張圖,即對於一條邊,其對角線的點相互到達需要幾次旋轉,若該邊為 則左上角到右下角可以不用旋轉邊直接到達,而左下角到右上角則需要一次旋轉,故可將該兩點間邊權置為1,將圖建立起來。接下來可以有兩種做法,堆優化最短路跑,廣搜。這裡說一下廣搜 ...

175 電路維修 bfs

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