bfs 三維標記

2021-08-11 12:40:04 字數 1043 閱讀 2253

做訓練賽遇到的一道題,感覺很好。

大致題意:

現在給你乙個地圖n*m,' . '代表是空格子,' * '代表是有柱子阻隔。現在你站在a點,要走到b點。走的時候要遵循乙個規則:必須走相鄰的格仔,如果相鄰的格仔為有柱子格仔,那麼這個格仔與有柱子的格仔相鄰的邊**,如果乙個有柱子的格仔的兩條或者多條不同的邊**了,那麼這個格仔就會變成空格子。現在問你,你是否能從a點走到b點。

n<=500,m<=500.

大致思路:

首先想到是bfs,但是這個**的狀態怎麼表示呢?而且我們注意到乙個空格子是可以反覆走的。

我的思路是定義乙個三維陣列v[x][y][i],代表想x,y所在的格仔是否往i反向走過。(i四種狀態,上下左右)如果x,y向i方向走之後所在的格仔是柱子格仔,那麼就讓這個柱子格仔的check值加1(我們可以再開個陣列check,代表柱子格仔的邊有幾條著火,當check[x][y]的值為2時,就把它變成』 . ')。如果不是,那麼就正常走。

每次走之後我們都把v當前的[x][y][i]記錄為1,代表這個格仔已經走過旁邊的某個格仔了,以後不用再走了。這樣就避免了重複入隊。

**:

#include#include#include#include#include#includeusing namespace std;

char rc[550][550];

int vis[550][550][4];

int check[550][550];

int r,c;

int dis[4][2]= ,,,};

typedef struct node

node;

mapm;

int bfs(node a,node b)

else}}

}}

}return 0;

}int main()

}node st,ed;

cin>>st.x>>st.y>>ed.x>>ed.y;

if(bfs(st,ed))

else

printf("no\n");}}

}

腫瘤診斷 三維BFS

腫瘤診斷 在診斷腫瘤疾病時,計算腫瘤體積是很重要的一環。給定病灶掃瞄切片中標註出的疑似腫瘤區域,請你計算腫瘤的體積。輸入第一行給出4個正整數 mm nn ll tt,其中mm和nn是每張切片的尺寸 即每張切片是乙個m times nm n的畫素矩陣。最大解析度是1286 times 1281286 ...

地牢大師(三維BFS)

你現在被困在乙個三維地牢中,需要找到最快脫離的出路!地牢由若干個單位立方體組成,其中部分不含岩石障礙可以直接通過,部分包含岩石障礙無法通過。向北,向南,向東,向西,向上或向下移動乙個單元距離均需要一分鐘。你不能沿對角線移動,迷宮邊界都是堅硬的岩石,你不能走出邊界範圍。請問,你有可能逃脫嗎?如果可以,...

POJ 2251(基礎三維BFS)

poj2251 在乙個三維格仔裡面,有兩種格仔,一種可以走一種不能。給定乙個起點和終點問從起點最少走多少步可以到達終點。很基礎的一道bfs,在這裡記錄一下以後處理類似的問題乙個技巧 通過xx yy zz陣列實現乙個人迴圈將乙個節點周圍的元素入隊。include include include inc...