- 深さ優先探索 (AtCoder Typical Contest 001)
https://atcoder.jp/contests/atc001/tasks/dfs_a
- https://atcoder.jp/contests/atc001/submissions/40591579
- 幅優先探索で解けるはずなので ABC で出ればそちらで解きそう
- せっかくなのでタイトルに合わせて深さ優先探索で解いた
use proconio::{input, marker::Chars}; fn dfs( h: usize, w: usize, c: &[Vec<char>], used: &mut Vec<Vec<bool>>, s: (usize, usize), g: (usize, usize), ) -> bool { if s == g { return true; } let (i, j) = s; let dir = vec![(-1, 0), (0, -1), (0, 1), (1, 0)]; for (dr, dc) in dir { let (nr, nc) = (i as i64 + dr, j as i64 + dc); if !(0..h as i64).contains(&nr) || !(0..w as i64).contains(&nc) { continue; } let (nr, nc) = (nr as usize, nc as usize); if c[nr][nc] == '#' || used[nr][nc] { continue; } used[nr][nc] = true; if dfs(h, w, c, used, (nr, nc), g) { return true; } } false } fn main() { input! { h: usize, w: usize, c: [Chars; h], } let (mut s, mut g) = ((0, 0), (0, 0)); for i in 0..h { for j in 0..w { if c[i][j] == 's' { s = (i, j); } else if c[i][j] == 'g' { g = (i, j); } } } let mut used = vec![vec![false; w]; h]; used[s.0][s.1] = true; let ans = dfs(h, w, &c, &mut used, s, g); println!("{}", if ans { "Yes" } else { "No" }); }
スマート EX 会員になった。
今日のコミット。
- tsukota 1 commit
- rust-atcoder 1 commit