#include #include #include #include #include #include #include using namespace std; const int n_max = 20; int graph[n_max][n_max]; int n, src; vector< vector< int > > aus; int TSP (int status, int x) { if (aus[status][x] != -1) return aus[status][x]; int mask = 1 << x; aus[status][x] = 1e9; for (int i = 0; i < n; ++i) if (i != x && (status & (1 << i))) aus[status][x] = min (aus[status][x], TSP (status - mask, i) + graph[i][x]); return aus[status][x]; } int main () { ifstream fin ("input.txt"); assert (fin); fin >> n; aus = vector< vector< int > >(1 << n, vector< int >(n, -1)); for (int j = 0; j < n; j++) for (int i = 0; i < n; i++) fin >> graph[j][i]; fin.close (); for (int i = 0; i < n; ++i) aus[1 << i][i] = graph[src][i]; ofstream fout ("output.txt"); fout << TSP((1 << n) - 1, 1); fout.close (); return 0; }