본문 바로가기

ALGORITHM/DFS, BFS

11581 구호물자

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

 

11581번: 구호물자

서기 2050년 엄청나게 강력한 폭풍이 인천을 강타했다. 강력한 폭풍의 영향으로 모든 사람은 대피소로 대피하였으며, 많은 도로가 유실되었다. 그나마 남아있는 도로도 모든 표지판과 가로등이

www.acmicpc.net

구현방법: DFS (재귀함수)

 

dfs 함수 안에 도착점(N)에 도착하면 return 하는 조건을 넣었을 때 75% 까지만 완료되고 '틀렸습니다'가 반복됐는데, 딱 cycle이 발생하는지 아닌지만 확인하려고 이 조건을 지우니 맞았다.

아무튼 cycle이 존재하는지 확인하는 문제

 

memset은 cstring 헤더가 필요하다는 것도 다시 알게 된 사실

초기화 부분은 안 써도 되지만 새로운 걸 알게 돼서 써봤다._.

 

#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>

#define initialize(x, y) memset(x, y, sizeof(x));

using namespace std;

int N, result;
bool visited[101];
bool finished[101];
vector<vector<int>> adj;

void dfs(int u) {
	visited[u] = true;
	for (int v : adj[u]) {
		if (finished[v]) {
			return;
		}
		else if (!visited[v]) {
			dfs(v);
		}
		else if (visited[v]) {
			result = -1;
		}
	}
	finished[u] = true;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
	
	int M, C;
	cin >> N;
    
	adj.assign(N + 1, vector<int>());
	initialize(visited, false);
	initialize(finished, false);

	for (int i = 1; i <= N - 1; i++) {
		cin >> M;
		while(M--) {
			cin >> C;
			adj[i].push_back(C);
		}
	}

	dfs(1);

	if (result == -1) {
		cout << "CYCLE";
	}
	else {
		cout << "NO CYCLE";
	}
}

오랜만에 코딩할 때의 노오력은 항상 처음부터 다시 공부하는 것

'ALGORITHM > DFS, BFS' 카테고리의 다른 글

14889 스타트와 링크  (0) 2021.01.16
9663 N-Queen  (0) 2021.01.16
15649 N과 M (1)  (0) 2021.01.12
17267 상남자  (1) 2021.01.07
11578 팀원 모집  (0) 2020.12.26