做訓練賽遇到的一道題,感覺很好。
大致題意:
現在給你乙個地圖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...