일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- Spring-Boot
- pipex
- data-root
- Born2beroot #42
- 42
- 네스트JS
- nestjs
- Daemon
- Spring
- 데이터중심애플리케이션설계
- dockerd
- docker
- ecole42
- django #ninja #django-ninja #장고
- 42Seoul
Archives
- Today
- Total
혼자 정리
11403번: 경로 찾기 본문
C++
#include <iostream>
#include <cstring>
using namespace std;
int N;
int matrix[101][101];
int ret[101][101];
int visited[101];
void dfs(int start, int nod){
if (visited[nod] == 1)
return ;
visited[nod] = 1;
for (int i = 1; i <= N; i++){
if (matrix[nod][i] == 1){
if (nod != i){
ret[start][i] = 1;
dfs(start, i);
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 1; i <= N; i++){
for (int j = 1; j <= N; j++){
cin >> matrix[i][j];
}
}
for (int i = 1; i <= N; i++){
memset(visited, 0, sizeof(int) * 101);
dfs(i, i);
}
for (int i = 1; i <= N; i++){
for (int j = 1; j <= N; j++){
cout << ret[i][j] << " ";
}
cout << "\n";
}
}
- BFS/DFS으로 각 정점마다 도달 가능 여부를 체크하는 방식을 사용했다
- 각 정점에서 $O(N^{2})$ 소요
- 모든 정점에 대해 BFS 실행시 총 $O(N^{3})$ 소요
- 노드의 수가 늘어나는 경우 '플로이드-워셜 알고리즘'을 사용해야 할 것 같다 -> 학습 필요
'알고리즘 문풀 > 백준' 카테고리의 다른 글
7662번: 이중 우선순위 큐 (0) | 2021.08.10 |
---|---|
16928번: 뱀과 사다리 게임 (0) | 2021.08.10 |
11724번: 연결 요소의 개수 (0) | 2021.08.09 |
6064번: 카잉 달력 (0) | 2021.08.09 |
11727번: 2×n 타일링 2 (0) | 2021.08.08 |