この問題は、講座用問題です。ページ下部に解說が掲載されています。
高橋君の住む街は長方形の形をしており、格仔狀の區畫に區切られています。 長方形の各辺は東西及び南北に並行です。 各區畫は道または塀のどちらかであり、高橋君は道を東西南北に移動できますが斜めには移動できません。 また、塀の區畫は通ることができません。
高橋君が、塀を壊したりすることなく道を通って魚屋にたどり著けるかどうか判定してください。
入力は以下の形式で標準入力から與えられる。
$ h $ $ w $
$ c_ $ $ c_ $ $ c_ $
$ c_ $ $ c_ $ $ c_ $
: $ c_ $ $ c_ $ $ c_ $
塀を 1 回も壊さずに、家から魚屋まで辿り著くことができる場合はyes
、辿りつけない場合はno
を標準出力に 1 行で出力せよ。
高橋先生住的小區是長方形的,被劃分成乙個個格仔。高橋先生想從家裡去魚店,高橋先生每次可以走到他前後左右四個格仔中的其中乙個,但不能斜著走,也不能走出小區。
現在給出地圖:
s
:代表高橋先生的家
g
:代表魚店
.
:代表道路
#
:代表牆壁
高橋先生不能穿過牆壁。
輸入:第一行輸入n(1<=n<=500),m(1<=m<=500)代表小區的長和寬,接下來n行每行m個字元,描述小區中的每個格仔。
輸出:如果高橋先生能到達魚店,輸出"yes",否則輸出"no"。
4
5s####..
..#######..
.g
no
44.
..s..
....
...g..
yes
10
10s...
....
..#########.#..
....
.#.#.
.####.#.
##..
..#.#.
#####.#.#.
g.#.#.#.#.
#.#.#.#.#.
###.#.#.#.#..
...#..
.
no
10
10s...
....
..#########.#..
....
.#.#.
.####.#.
##..
..#.#.
#####.#.#.
g.#.#.#.#.
#.#.#.#.#.
#.#.#.#.#.#..
...#..
.
yes
1
10s.
.####.
.g
no
這題是個很簡單的dfs模板題,然而我還是受苦了(哭)。
要注意的地方:
1.起點不一定是左上角,而是s
所在的位置;
2.判斷能不能走,直接判斷是不是牆壁#
即可,其他三種情況都能走,包括遇到下乙個s
;
3.輸出要換行;
4.開的二維陣列要大一點;
5.二維陣列的行和列都是從0開始的,而不是1(我在這裡卡了很久)。
另外,可以精簡**的地方:
1.用兩個dx和dy的陣列來模擬移動,可以少寫很多if語句,直接將四種情況放在乙個for迴圈裡即可;
2.是否越界可以寫成乙個bool型的判斷函式。
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
510;
bool visited[maxn]
[maxn]
;char maze[maxn]
[maxn]
;void
dfs(
int now_x,
int now_y,
int n,
int m,
bool
&flag)
if(maze[now_x-1]
[now_y]
!='#'
&& visited[now_x-1]
[now_y]
==false
&& now_x-
1>=
0&& now_x-
1=0&& now_yif(maze[now_x+1]
[now_y]
!='#'
&& visited[now_x+1]
[now_y]
==false
&& now_x+
1>=
0&& now_x+
1=0&& now_yif(maze[now_x]
[now_y-1]
!='#'
&& visited[now_x]
[now_y-1]
==false
&& now_x>=
0&& now_x1>=
0&& now_y-
1if(maze[now_x]
[now_y+1]
!='#'
&& visited[now_x]
[now_y+1]
==false
&& now_x>=
0&& now_x1>=
0&& now_y+
1}int
main()
}}bool flag =
false
;dfs
(start_x, start_y, n, m, flag);if
(flag==
true
)printf
("yes\n");
else
printf
("no\n");
return0;
}
AtCoder 1350 深 優先探索(DFS)
由於本題的 在 atcoder 上,是日文,而在洛谷上也直接給出了題目翻譯和大意,如下 高橋先生住的小區是長方形的,被劃分成乙個個格仔。高橋先生想從家裡去魚店,高橋先生每次可以走到他前後左右四個格仔中的其中乙個,但不能斜著走,也不能走出小區。現在給出地圖 s 代表高橋先生的家 g 代表魚店 代表道路...
洛谷1350 車的放置
題目描述 有下面這樣的乙個網格棋盤,a,b,c,d表示了對應邊長度,也就是對應格仔數。當a b c d 2時,對應下面這樣乙個棋盤 要在這個棋盤上放k個相互不攻擊的車,也就是這k個車沒有兩個車在同一行,也沒有兩個車在同一列,問有多少種方案。同樣只需要輸出答案mod 100003後的結果。輸入輸出格式...
洛谷 P1350 車的放置
洛谷 p1350 車的放置 有下面這樣的乙個網格棋盤,a,b,c,d表示了對應邊長度,也就是對應格仔數。當a b c d 2時,對應下面這樣乙個棋盤 要在這個棋盤上放k個相互不攻擊的車,也就是這k個車沒有兩個車在同一行,也沒有兩個車在同一列,問有多少種方案。同樣只需要輸出答案mod 100003後的...