#include #include #include #include #include #include using namespace std; const int MAX_N = 20; int graph[MAX_N][MAX_N]; int n, src; vector< vector< int > > dp; void init() { for ( int i = 0; i < n; ++i ) dp[ 1 << i ][ i ] = graph[ src ][ i ]; } int TSP( int status, int x ) { if ( dp[ status ][ x ] != -1 ) return dp[ status ][ x ]; int mask = 1 << x; dp[ status ][ x ] = 1e9; for ( int i = 0; i < n; ++i ) if ( i != x && ( status & ( 1 << i ) ) ) dp[ status ][ x ] = min( dp[ status ][ x ], TSP( status - mask, i ) + graph[ i ][ x ] ); return dp[ status ][ x ]; } int main() { ifstream fin("Iinput0.txt"); assert( fin ); fin >> n; dp = 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(); init(); ofstream fout("output.txt"); fout << TSP( ( 1 << n ) - 1, 1); fout.close(); return 0; }