/* Programmation dynamique du ploblème du voyageur de commerce. Pour n villes, la taille mémoire est O(n 2^n) et le temps de calcul O(n² 2^n). Ce programme met moins d'une seconde pour 25 villes. f[(1<<2)+(1<<3)+(1<<5)][4]=min(d[n-1][2]+d[2][3]+d[3][5]+d[5][4], d[n-1][2]+d[2][5]+d[5][3]+d[3][4], d[n-1][3]+d[3][2]+d[2][5]+d[5][4], d[n-1][3]+d[3][5]+d[5][2]+d[2][4], d[n-1][5]+d[5][2]+d[2][3]+d[3][4], d[n-1][5]+d[5][3]+d[3][2]+d[2][4]) est la longueur du plus court chemin de la ville n-1 à la ville 4 en passant intermédiairement par les villes 2, 3 et 5. if((1< #define n 4 #define nn (1<<(n-1)) int d[n][n]={{0,3,2,4}, {3,0,2,5}, {2,2,0,3}, {4,5,3,0}}, f[nn][n]; int main() { int J,i,j,x; for(j=0;j