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

68. 최소비용(인접리스트)

코다람쥐 2022. 5. 16. 12:07

나의정답.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>

using namespace std;

int cp[30] = { 0 };
int n, res = 100000;
vector<pair<int, int> > map[30];

void dfs(int v, int sum) {
	if (v == n) {
		if (sum < res)
			res = sum;
	}
	else {
		for (int i = 0; i < map[v].size(); i++) {
			if (cp[ map[v][i].first ] == 1) continue;
			cp[ map[v][i].first ] = 1;
			dfs( map[v][i].first, sum + map[v][i].second);
			cp[ map[v][i].first ] = 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 < m; i++) {
		scanf("%d %d %d", &a, &b, &c);
		map[a].push_back(make_pair(b, c));
	}

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