문제
https://www.acmicpc.net/problem/11403
11403번: 경로 찾기
가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
www.acmicpc.net
풀이
기본 그래프 문제처럼 풀었다. 알고리즘 분류 및 타 블로그에는 플로이드 와샬로 많이 푼 것 같다.
하지만 기본 DFS 그래프 탐색으로도 풀 수 있을 것 같아서 그렇게 풀었다. 이런 그래프 문제는 2차원 배열 형식으로 풀기보단 Vector를 사용하는 것이 생각하기 좀 더 수월한 것 같다.
visited배열을 활용하여 기본 Cycle방지 + 인덱스에 값을 할당하였다.
코드
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
int N;
vector<int> map[101];
int visited[101];
void dfs(int k) {
for (int i = 0; i < map[k].size(); i++) {
if (visited[map[k][i]] == 0) {
visited[map[k][i]] = 1; //다음칸
dfs(map[k][i]);
}
}
}
int main() {
cin >> N;
for (int y = 0; y < N; y++) {
for (int x = 0; x < N; x++) {
int a;
cin >> a;
if(a==1)map[y].push_back(x);
}
}
for (int i = 0; i < N; i++) {
memset(visited, 0, sizeof(visited));
dfs(i);
for (int j = 0; j < N; j++) {
cout << visited[j] << " ";
}
cout << '\n';
}
return 0;
}
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 통계학 (2108/C++) (0) | 2022.02.02 |
---|---|
[백준] 나는야 포켓몬 마스터 이다솜 (1620/C++) (0) | 2022.01.31 |
[백준] 최대 힙 (11279/C++) (0) | 2022.01.26 |
[백준] 최소 힙 (1927/C++) (0) | 2022.01.26 |
[백준] 좌표 정렬하기 (11650/C++) (0) | 2022.01.23 |