https://www.acmicpc.net/problem/10971

 

10971번: 외판원 순회 2

첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j로 가기 위한 비용을 나타낸다. 항상 순회할 수 있는 경우만 입력으로 주어진다.

www.acmicpc.net

 

 

//나머지
#include<stdio.h>
#include<vector>
#include<stack>
#include<string.h>
#include<algorithm>
using namespace std;

int main(void)
{
    int n;
    int w[10][10] = {0, };
    int a[10];
    int min=2100000000;

    for(int i=0; i<10; i++)
    {
        a[i] = i;
    }
    int sum=0;

    scanf("%d", &n);
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            scanf("%d", &w[i][j]);
        }
    }
    do{
        sum=0;
        int flag = 1;
        for(int i=0; i<n; i++)
        {
            int x;
            if(i+1 < n)
            {
                x = w[a[i]][a[i+1]];
                sum+=x;
            }
            else
            {
                x = w[a[i]][a[0]];
                sum+=x;
            }
            if(x==0)
            {
                flag++;
            }
        }
        if(flag == 1 && min>sum)
        {
            min = sum;
        }
    }while(next_permutation(a, a+n)!=0);

    printf("%d", min);
	return 0;
}

'정보올림피아드-KOI > BOJ' 카테고리의 다른 글

단어 뒤집기 2  (0) 2021.12.31
백준 : 가운데를 말해요 1655번  (0) 2020.05.10
백준 - 프린터 큐 : 1966번  (0) 2020.04.26
백준 - 로마 숫자 만들기 : 16922번  (0) 2020.04.26
백준 - 두 로봇 : 15971  (0) 2020.03.31

+ Recent posts