말 그대로 경로를 찾는 문제다.
진짜 기초적인 그래프 문제
DFS와 BFS를 사용하여 풀 수 있다.
DFS
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <stdio.h> #include <iostream> #include <queue> #include <vector> #include <memory.h> using namespace std; int d[101]; int ans[101][101]; int arr[101][101]; int n; vector<vector<int>> a; void check(int num, int now) { for (int i = 0; i < a[now].size(); i++) { int x = a[now][i]; if (d[x] == 0) { d[x] = -1; ans[num][x] = 1; check(num,x); } } return; } int main() { //freopen("Text.txt", "r", stdin); cin >> n; for (int i = 0; i < n; i++) { vector <int> tmp; a.push_back(tmp); } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> arr[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (arr[i][j] == 1) { a[i].push_back(j); } } } for (int i = 0; i < n; i++) { check(i,i); memset(d, 0, sizeof(d)); } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << ans[i][j] << " "; } cout << endl; } } | cs |
BFS
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <stdio.h> #include <iostream> #include <queue> #include <vector> #include <memory.h> using namespace std; int d[101]; int ans[101][101]; int main() { //freopen("Text.txt", "r", stdin); int n; int arr[101][101]; queue <int> q; vector<vector<int>> a; cin >> n; for (int i = 0; i < n; i++) { vector <int> tmp; a.push_back(tmp); } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> arr[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (arr[i][j] == 1) { a[i].push_back(j); //a[j].push_back(i); } } } for (int i = 0; i < n; i++) { q.push(i); while (!q.empty()) { int x = q.front(); q.pop(); for (int j = 0; j < a[x].size(); j++) { if (d[a[x][j]] == 0) { d[a[x][j]] = -1; ans[i][a[x][j]] = 1; q.push(a[x][j]); } } } memset(d, 0, sizeof(d)); } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << ans[i][j] << " "; } cout << endl; } } | cs |
'BOJ' 카테고리의 다른 글
백준 2468 / 안전 영역 (0) | 2019.01.01 |
---|---|
백준 2583 / 영역 구하기 (0) | 2019.01.01 |
백준 1012 / 유기농 배추 (0) | 2018.12.31 |
백준 1389 / 케빈 베이컨의 6단계 법칙 (0) | 2018.12.30 |
백준 1010 / 다리 놓기 (0) | 2018.12.30 |