본문 바로가기
알고리즘/백준 & swacademy

BOJ 11562 - 백양로 브레이크

by sun__ 2019. 8. 6.
#include <iostream>
#include <algorithm>
using namespace std;
const int INF = 1e9;
int dist[251][251];

int main() {
	int n, m; scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			dist[i][j] = i == j ? 0 : INF;

	for (int i = 0, u, v; i < m; i++) {
		bool w;
		cin >> u >> v >> w;
		if (w == 0) {
			dist[u - 1][v - 1] = 0;
			dist[v - 1][u - 1] = 1;
		}
		else {
			dist[u - 1][v - 1] = dist[v - 1][u - 1] = 0;
		}
	}
	for (int k = 0; k < n; k++)
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
				dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);

	int tc; scanf("%d", &tc);
	while (tc--) {
		int a, b; scanf("%d %d", &a, &b);
		printf("%d\n", dist[a - 1][b - 1]);
	}
}

푼지 오래돼서 정확하게 기억이 안나지만..

 

단방향 통로 = 비용1, 양방향 통로= 비용0 으로 생각해서

플로이드 와샬을 돌리면 된다.

'알고리즘 > 백준 & swacademy' 카테고리의 다른 글

BOJ 2098 - 외판원 순회 TSP  (0) 2019.08.06
BOJ 1405 - 미친 로봇  (0) 2019.08.06
BOJ 11780 - 플로이드2  (0) 2019.08.06
BOJ 1300 - K번째 수  (0) 2019.07.29
BOJ 12865 - 평범한 배낭  (0) 2019.07.29