N의 크기(N <=100)가 크지 않으므로 일일이 탐색해서 풀면 된다.
* 매번 한 개의 정점을 탐색할 때마다 visited 배열을 false로 초기화 후에 사용해야 한다.
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
vector<vector<int> > route;
bool visited[101];
int arr[101][101];
int N;
void dfs(int y) {
int size = route[y].size();
for (int i = 0; i < size; i++) {
if (!visited[route[y][i]]) {
visited[route[y][i]] = true;
dfs(route[y][i]);
}
}
}
int main() {
scanf("%d", &N);
route.resize(N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
int temp;
scanf("%d", &temp);
arr[i][j] = temp;
if (temp == 1) {
route[i].push_back(j);
}
}
}
for (int i = 0; i < N; i++) {
memset(visited, false, sizeof(bool) * N);
dfs(i);
for (int j = 0; j < N; j++) {
if (visited[j]) {
arr[i][j] = true;
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
'알고리즘' 카테고리의 다른 글
BOJ 9466번: 텀 프로젝트 (0) | 2020.01.28 |
---|---|
BOJ 10552번: DOM (0) | 2020.01.28 |