AtCoder Typical Contest 001 A 深さ優先探索
簡単なDFSが自力で書けるようになったけどまだ時間がかかる。
いつでもすらすらスムーズに書けるようになりたい。
#include <bits/stdc++.h> using namespace std; static const int INF = 1000000; int H, W; char C[510][510]; int D[510][510]; int dx[4] = { 1,-1,0,0 }; int dy[4] = { 0,0,-1,1 }; void bfs(int x, int y) { for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; //if (nx < 0 || nx >= H || ny < 0 || ny >= W)continue; if (C[nx][ny] != '.' && C[nx][ny] != 'g') continue; if (D[nx][ny] != INF) continue; D[nx][ny] = 0; bfs(nx, ny); } return; } int main() { cin >> H >> W; //スタート ゴール変数設定 int sx, sy, gx, gy; //入力 for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { cin >> C[i][j]; if (C[i][j] == 's') { sx = i; sy = j; } if (C[i][j] == 'g') { gx = i; gy = j; } } } //初期化 for (int i = 0; i < 510; i++) { for (int j = 0; j < 510; j++) { D[i][j] = INF; } } /*for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { cout<<D[i][j]; } cout<<endl; }*/ D[sx][sy] = 0; bfs(sx, sy); if (D[gx][gy] == INF) { cout << "No" << endl; } else { cout << "Yes" << endl; } /*for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { cout<<D[i][j]; } cout<<endl; }*/ return 0; }