22-04-12-14889-스타트와링크
본문 바로가기
알고리즘 모음집/New 알고리즘

22-04-12-14889-스타트와링크

by KyeongMin 2022. 4. 12.
728x90
반응형

01.DFS로 팀나누기

void dfs(int idx,int cnt)
{
	if (N / 2 == cnt)
	{
		vector<int>start;
		vector<int>link;
		for (int i = 0; i < N; i++)
		{
			if (D[i] == 1) start.push_back(i);
			else if (D[i] == 0)link.push_back(i);
		}

		int sumStart = 0;
		int sumLink = 0;
		for (int i = 0; i < start.size(); i++)
		{
			for (int j = 0; j < start.size(); j++)
			{
				if (start[i] == start[j]) continue;
				sumStart += board[start[i]][start[j]];
			}
		}
		
		for (int i = 0; i < link.size(); i++)
		{

			for (int j = 0; j < link.size(); j++)
			{
				if (link[i] == link[j]) continue;
				sumLink += board[link[i]][link[j]];
			}
		}
		int minusResult = abs(sumStart-sumLink);
		ret = min(minusResult, ret);
		return;
	}
  • 팀을 1을 스타트팀
    • 0을 링크팀으로 구분하여 dfs를 돌려서 모든 경우 확인 하면서 계산 진행

02.전체소스

#include<stdio.h>
#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
#define NS 21
using namespace std;
int N;
int ret;
int board[NS][NS];
int D[NS];
void initValue()
{
	N = 0;
	ret = 0x7fffffff;
	scanf("%d", &N);
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++) 
		{
			scanf("%d", &board[i][j]);
		}
	}
}

void dfs(int idx,int cnt)
{
	if (N / 2 == cnt)
	{
		vector<int>start;
		vector<int>link;
		for (int i = 0; i < N; i++)
		{
			if (D[i] == 1) start.push_back(i);
			else if (D[i] == 0)link.push_back(i);
		}

		int sumStart = 0;
		int sumLink = 0;
		for (int i = 0; i < start.size(); i++)
		{
			for (int j = 0; j < start.size(); j++)
			{
				if (start[i] == start[j]) continue;
				sumStart += board[start[i]][start[j]];
			}
		}
		
		for (int i = 0; i < link.size(); i++)
		{

			for (int j = 0; j < link.size(); j++)
			{
				if (link[i] == link[j]) continue;
				sumLink += board[link[i]][link[j]];
			}
		}
		int minusResult = abs(sumStart-sumLink);
		ret = min(minusResult, ret);
		return;
	}

	for (int i = idx; i < N; i++) {
		if (D[i] == 0) {
			D[i] = 1;
			dfs(i+1,cnt+1);
			D[i] = 0;
		}
	}


}
int main(void)
{
	initValue();
	dfs(0,0);
	printf("%d\n", ret);
	return 0;
}
728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

22-04-17-15683-감시  (0) 2022.04.17
22-04-14-14891-톱니바퀴  (0) 2022.04.17
22-04-11-14888-연산자끼워넣기  (0) 2022.04.12
22-04-11-14503-로봇청소기  (0) 2022.04.11
22-04-09-14502-연구소  (0) 2022.04.10

댓글