https://www.acmicpc.net/problem/1240
1240번: 노드사이의 거리
N(2≤N≤1,000)개의 노드로 이루어진 트리가 주어지고 M(M≤1,000)개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라.
www.acmicpc.net
노드와 간선에 관한 비용 문제였다. 문제에서 트리는 노드들이 서로 양방향으로 연결되어 있고 최대 1000개의 노드를 가진다. 따라서 1001개의 벡터를 선언하고 1001 X 1001개의 서로 다른 노드를 연결 하였을 때 드는 비용을 저장하였다. 노드의 대한 정보를 입력 받은 후에 bfs를 이용하여 내가 출발한 노드에서 도착한 노드까지의 비용을 출력하면 된다.
#include <iostream>
#include <queue>
#include <vector>
#define MAX 1001
using namespace std;
class Point {
public:
int t, cost;
Point(int t, int cost) {
this->t = t;
this->cost= cost;
}
};
int N, M;
int x, y, z;
int a, b;
int mat[MAX][MAX];
vector<int> v[MAX];
void bfs() {
bool visit[MAX] = { false, };
queue<Point> q;
q.push(Point(a, 0));
visit[a] = true;
while(!q.empty()) {
int t = q.front().t;
int cost = q.front().cost;
q.pop();
if(t == b) {
cout << cost << '\n';
break;
}
for(unsigned int i = 0; i < v[t].size(); i++) {
if(!visit[v[t][i]]) {
q.push(Point(v[t][i], cost + mat[t][v[t][i]]));
visit[v[t][i]] = true;
}
}
}
}
int main() {
cin >> N >> M;
for(int i = 0; i < N - 1; i++) {
cin >> x >> y >> z;
v[x].push_back(y);
v[y].push_back(x);
mat[x][y] = z;
mat[y][x] = z;
}
for(int j = 0; j < M; j++) {
cin >> a >> b;
bfs();
}
}
'백준' 카테고리의 다른 글
백준16162 - 가희와 3단 고음 (0) | 2020.05.13 |
---|---|
백준18353 - 병사 배치하기 (0) | 2020.05.12 |
백준11607 - Grid (0) | 2020.05.01 |
백준9753 - 짝 곱 (0) | 2020.04.21 |
백준14430 - 자원 캐기 (0) | 2020.04.19 |