본문 바로가기
백준 알고리즘/플로이드 와샬 알고리즘

합승 택시 요금

by paysmile 2021. 4. 6.

https://programmers.co.kr/learn/courses/30/lessons/72413

 

코딩테스트 연습 - 합승 택시 요금

6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

#define INF 987654321
const int MAX = 201;
int fare[MAX][MAX];
int N;

int Min(int a, int b) { if (a < b) return a; return b; }

void FindCheappest() {
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			for (int k = 1; k <= N; k++) {
				if (i == j || i == k || j == k) continue;
				if(fare[j][i] != INF && fare[i][k] != INF)	fare[j][k] = Min(fare[j][k], fare[j][i] + fare[i][k]);
			}
		}
	}
}

int solution(int n, int s, int a, int b, vector<vector<int>> fares) {
	int answer = 0;

	N = n;

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			fare[i][j] = 987654321;
		}
	}

	for (int i = 0; i < fares.size(); i++) {
		fare[fares[i][0]][fares[i][1]] = fares[i][2];
		fare[fares[i][1]][fares[i][0]] = fares[i][2];
	}
	for (int i = 1; i <= n; i++)	fare[i][i] = 0;

	FindCheappest();

	answer = fare[s][a] + fare[s][b];

	for (int i = 1; i <= n; i++) {
		if(fare[s][i] != INF && fare[i][a] != INF && fare[i][b] != INF)
			answer = Min(fare[s][i] + fare[i][a] + fare[i][b], answer);
	}
	return answer;
}

'백준 알고리즘 > 플로이드 와샬 알고리즘' 카테고리의 다른 글

백준 2606번 C++  (0) 2019.01.05