알고리즘 문제풀기/인프런 강의 정답

67. 최소 비용 (그래프 DFS)

코다람쥐 2022. 5. 15. 12:01

나의정답.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>

using namespace std;

int map[30][30];
int cp[30] = { 0 };
int n, sum = 0;
int mi = 100000;

void dfs(int v) {
if (v == n) {
	if (sum < mi) 
		mi = sum;
	}
	else {
		for (int i = 1; i <= n; i++) {
			if (map[v][i] == 0) continue;
			if (cp[i] == 1) continue;

			cp[i] = 1;
			sum += map[v][i];
			dfs(i);
			sum -= map[v][i];
			cp[i] = 0;
		}
	}
}

int main(int argc, char** argv) {
	//freopen("input.txt", "rt", stdin);
	int m, a, b, c;
	scanf("%d %d", &n, &m);

	for (int i = 0; i < 30; i++)
		for (int j = 0; j < 30; j++)
			map[i][j] = 0;

	for (int i = 0; i < m; i++) {
		scanf("%d %d %d", &a, &b, &c);
		map[a][b] = c;
	}

	cp[1] = 1;
	dfs(1);
	printf("%d", mi);
}