05/11/13 18:28:11
>>147
入力の仕様がわからなかったので,以下の仕様に従うことにした.標準入力から読み込む.
「1行目: 都市の数,2行目から: 都市1 都市2 その間の距離,終端: EOF」
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int inf = 1 << 30;
// brute force using recursion ( O(n!) )
int solve(int pos, int start, vector< vector<int> >& adj, vector<bool>& used) {
used[pos] = true;
int d = inf;
if (find(used.begin(), used.end(), false) == used.end()) d = adj[pos][start];
for (int i = 0; i < used.size(); ++i)
if (!used[i]) d = min(d, adj[pos][i] + solve(i, start, adj, used));
used[pos] = false;
return d;
}
int main() {
int n; cin >> n;
vector< vector<int> > adj(n, vector<int>(n, inf));
int a, b, d;
while (cin >> a >> b >> d) adj[a][b] = adj[b][a] = d;
vector<bool> used(n, false);
int start = 0; used[start] = true;
cout << solve(start, start, adj, used) << endl;
}