반응형

https://www.acmicpc.net/problem/16929

 

16929번: Two Dots

첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문

www.acmicpc.net

 

같은 색의 공에 대해서 DFS를 돌릴 때, 이미 방문했던 지점을 한번 더 방문한다면 사이클이 있는 것입니다.

 

#include <cstdio>

int dx[] = { -1,0,1,0 };
int dy[] = { 0,-1,0,1 };

int n, m, ans = 1;
char map[50][51];
bool visit[50][50] = { false };

bool dfs(int x, int y, int d) {
	visit[x][y] = true;
	for (int i = 0; i < 4; i++) {
		if ((i + 2) % 4 == d) continue; // 이전에 지나친 지점 제외
		int nx = x + dx[i];
		int ny = y + dy[i];
		if (nx < 0 || ny < 0 || nx >= n || ny >= m || map[x][y] != map[nx][ny]) continue;
		if (visit[nx][ny]) return false;
		if(!dfs(nx, ny, i)) return false;
	}
	return true;
}

int main() {
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) scanf("%s", map[i]);
	for (int i = 0; i < n && ans; i++) {
		for (int j = 0; j < m && ans; j++) {
			if (visit[i][j]) continue;
			if (!dfs(i, j, -1)) ans = 0;
		}
	}
	printf("%s", ans ? "No" : "Yes");
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1963 : 소수 경로  (0) 2021.11.16
백준 9944 : NxM 보드 완주하기  (0) 2021.11.16
백준 20003 : 거스름돈이 싫어요  (0) 2021.11.16
백준 16954 : 움직이는 미로 탈출  (0) 2021.11.16
백준 16932 : 모양 만들기  (0) 2021.11.16

+ Recent posts