끄적끄적 코딩
article thumbnail
Published 2019. 10. 1. 17:19
[C++] 백준 13565번 침투 알고리즘
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

검색 태그