// Latihan bergaya OSN, Bab 11, soal 3 -- pembahasan. // // Kota pertama dikunci sebagai titik awal, sisanya dicoba dalam semua // urutan dengan next_permutation: (N-1)! kemungkinan. #include #include #include using namespace std; int main() { int n; cin >> n; vector> d(n, vector(n)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> d[i][j]; vector urutan; for (int i = 1; i < n; i++) urutan.push_back(i); long long terbaik = -1; do { long long total = 0; int sekarang = 0; for (int kota : urutan) { total += d[sekarang][kota]; sekarang = kota; } total += d[sekarang][0]; if (terbaik < 0 || total < terbaik) terbaik = total; } while (next_permutation(urutan.begin(), urutan.end())); cout << terbaik << "\n"; return 0; }