[백준] 14889번 스타트와 링크 C++

semi·2022년 8월 23일
0

coding test

목록 보기
35/57

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

#include <iostream>
#include <vector>

using namespace std;

int N;
bool checked[20] = { 0 };
int list[20] = { 0 };
int min_val = 987654321;
vector<vector<int>> v(21, vector<int>(21, 0));
void DFS(int cnt, int cur_i)
{
	int a_sum = 0, b_sum = 0;
	if (cnt == N / 2)
	{
			
		for (int i = 0; i < N; i++)
		{
			for (int j = i+1; j < N; j++)
			{
				if (i != j)
				{
					if (checked[i] && checked[j])
					{
						a_sum += v[i][j];
						a_sum += v[j][i];
					}
					else if (!checked[i] && !checked[j])
					{
						b_sum += v[i][j];
						b_sum += v[j][i];
					}
				}
			}
		}
		if (min_val > abs(a_sum - b_sum))
		{
			min_val = abs(a_sum - b_sum);
			
		}
	}
	for (int i = cur_i; i < N; i++)
	{
		if (!checked[i])
		{
			checked[i] = true;
			list[cnt] = i;
			DFS(cnt + 1, i + 1);
			checked[i] = false;
		}

	}
}

int main(void)
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		int tmp;
		for (int j = 0; j < N; j++)
		{
			cin >> tmp;
			v[i][j] = tmp;
		}
	}
	DFS(0, 0);
	cout << min_val;
	return 0;
}

0개의 댓글