<링크>
https://www.acmicpc.net/problem/1240
<풀이>
모든 노드를 시작점으로 잡아 dfs를 한번씩 해준다.
dfs를 재귀 호출할 때마다 노드 간의 거리를 계속 더해서 인자로 넘기면, 시작점부터 현재노드까지의 거리가 된다.
dist[i][j] = i부터 j까지의 거리
<소스코드>
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 | #include<stdio.h> #include<vector> using namespace std; vector<pair<int,int>> adj[1001]; int isVisited[1001]; int dist[1001][1001]; void dfs(int, int, int); int main() { int N, M; scanf("%d%d", &N, &M); for(int n=0;n<N-1;++n) { int a, b, c; scanf("%d%d%d", &a, &b, &c); adj[a].push_back({ b,c }); adj[b].push_back({ a,c }); } for (int i = 1; i <= N; ++i) { isVisited[i] = 1; dfs(i, i,0); isVisited[i] = 0; } while (M--) { int a, b; scanf("%d%d", &a, &b); printf("%d\n", dist[a][b]); } } void dfs(int start,int i,int len) { dist[start][i] = len; int size = adj[i].size(); for (int j = 0; j < size; ++j) { int toi = adj[i][j].first; int cost = adj[i][j].second; if (!isVisited[toi]) { isVisited[toi] = 1; dfs(start, toi, len + cost); isVisited[toi] = 0; } } } | cs |
'알고리즘 풀이 > DFS' 카테고리의 다른 글
백준 10819 차이를 최대로 (0) | 2018.07.27 |
---|---|
백준 10974 모든 순열 (2) | 2018.07.24 |
KOITP 큰수만들기 (0) | 2018.07.23 |
백준 11724 연결 요소의 개수 :: 들짐승 (0) | 2018.07.23 |
백준 11403 경로 찾기 :: 들짐승 (0) | 2018.07.23 |