728x90
DFS, BFS 문제입니다.
outer side에서 inner side까지 이동할 수 있는지 구해야합니다.
첫번째 줄에서 마지막 줄까지 하나라도 이동이 가능하면 YES, 불가능하면 NO를 출력합니다.
첫번째줄에 대해서 모두 DFS를 하여서 마지막 줄에 접근이 되는지 찾아서 풀었습니다.
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
bool flag = false;
int n, m;
int moveX[4] = { 0, 1, 0, -1 };
int moveY[4] = { 1, 0, -1, 0 };
int map[1010][1010];
int visit[1010][1010];
string s;
void DFS(int a, int b)
{
visit[a][b] = 1;
if (flag == true || a == n - 1) {
flag = true;
return;
}
for (int i = 0; i < 4; ++i) {
int x = moveX[i] + a;
int y = moveY[i] + b;
if (visit[x][y] == 0 && map[x][y] == 0) {
DFS(x, y);
}
}
}
int main(int argc, char* argv[])
{
cin >> n >> m;
memset(map, -1, sizeof(map));
memset(visit, 0, sizeof(visit));
for (int i = 1; i <= n; ++i) {
cin >> s;
for (int j = 1; j <= m; ++j) {
map[i][j] = s[j - 1] - '0';
}
}
for (int j = 1; j <= m; ++j) {
if (map[1][j] == 0 && visit[1][j] == 0) {
DFS(1, j);
}
}
flag == true ? cout << "YES" << endl : cout << "NO" << endl;
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 1075번 나누기 (0) | 2019.10.02 |
---|---|
[C++] 백준 4504번 배수 찾기 (0) | 2019.10.02 |
[C++] 백준 14954번 Happy Number (0) | 2019.10.01 |
[C++] 백준 10992번 별 찍기 - 17 (0) | 2019.10.01 |
[C++] 백준 10991번 별 찍기 - 16 (0) | 2019.10.01 |