백준 11265 c++

magicdrill·2024년 10월 29일

백준 문제풀이

목록 보기
475/673

백준 11265 c++

플로이드 워셜 알고리즘을 사용한 간단한 문제이다.
플로이드 워셜 결과를 수행하고 나면 모든 점에서 다른 모든 점으로 가는 최소 비용을 구할 수 있는데, 이 값을 제시된 시간값과 비교하면 된다.

#include <iostream>
#include <vector>
#define MAXINT 2100000000

using namespace std;

void input_data(vector<vector<int>> &party_room, vector<vector<int>> &guest_data)
{
	cout << "\ninput_data()\n";
	int N, M;
	int T, A, B, C;
	int i, j;

	cin >> N >> M;
	party_room.resize(N + 1, vector<int>(N + 1, MAXINT));
	for (i = 1; i < party_room.size(); i++)
	{
		for (j = 1; j < party_room[i].size(); j++)
		{
			cin >> T;
			party_room[i][j] = T;//단방향
		}
	}
	for (i = 0; i < M; i++)
	{
		cin >> A >> B >> C;
		guest_data.push_back({ A, B, C });
	}

	return;
}

void floyd_warshall(vector<vector<int>>& party_room)
{
	cout << "\nfloyd_warshall()\n";
	int i, j, k;
	int N = party_room.size();
	
	for (k = 1; k < N; k++)
	{
		for (i = 1; i < N; i++)
		{
			for (j = 1; j < N; j++)
			{
				party_room[i][j] = min(party_room[i][j], party_room[i][k] + party_room[k][j]);
			}
		}
	}

	cout << "플로이드 워셜 결과\n";
	for (i = 1; i < N; i++)
	{
		for (j = 1; j < N; j++)
		{
			cout << party_room[i][j] << " ";
		}
		cout << "\n";
	}

	return;
}

void find_guest_is_able_to_arrive_party(vector<vector<int>>& party_room, vector<vector<int>>& guest_data)
{
	cout << "\nfind_guest_is_able_to_arrive_party()\n";
	int i, N = party_room.size(), M = guest_data.size();
	int A, B, C;

	for (i = 0; i < M; i++)
	{
		A = guest_data[i][0];
		B = guest_data[i][1];
		C = guest_data[i][2];
		cout << A << "에서 " << B << "까지 " << party_room[A][B] << "시간이 걸리는데 " << C << "시간 내에 이동 가능?\n";
		if (party_room[A][B] <= C)
		{
			cout << "Enjoy other party\n";
		}
		else
		{
			cout << "Stay here\n";
		}
	}

	return;
}

void find_answer(vector<vector<int>>& party_room, vector<vector<int>>& guest_data)
{
	cout << "\nfind_answer()\n";

	floyd_warshall(party_room);
	find_guest_is_able_to_arrive_party(party_room, guest_data);

	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	vector<vector<int>> party_room;
	vector<vector<int>> guest_data;

	input_data(party_room, guest_data);
	find_answer(party_room, guest_data);

	return 0;
}

0개의 댓글