시나브로

[D6] 1263. [S/W 문제해결 응용] 8일차 - 사람 네트워크2 본문

알고리즘/SW Expert Academy

[D6] 1263. [S/W 문제해결 응용] 8일차 - 사람 네트워크2

혬혬 2019. 10. 6. 11:00
728x90
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
int graph[1020][1020] = { 0 };


int main(void) {

	int test_case = 0;
	scanf("%d", &test_case);

	for (int i = 0; i < test_case; i++) {
		int person_number = 0;
		
		scanf("%d", &person_number);
		for (int n = 0; n < person_number; n++) {
			for (int m = 0; m < person_number; m++) {
				scanf("%d", &graph[n][m]);
				if (graph[n][m] == 0)
					graph[n][m] = 100000;
				if (n == m)
					graph[n][m] = 0;
			}
		}
		for (int k = 0; k < person_number; k++)
			for (int i =0; i < person_number; i++)
				for (int j = 0; j < person_number; j++)
					if (graph[i][k] + graph[k][j] < graph[i][j]) {
						graph[i][j] = graph[i][k] + graph[k][j];
					}

		int min = 100000;
		for (int n = 0; n < person_number; n++) {
			int box = 0;
			for (int m = 0; m < person_number; m++) {
				if(n!=m)
				box += graph[n][m];
			}
			if (min > box)
				min = box;
		}
		printf("#%d %d\n",i+1, min);
	}

	return 0;
}
728x90
Comments