#include <stdio.h> #include <string.h> int a[7][2]; int t[6][2]; int e1,e2,x1,x2; int n; int min = 0x7fffffff; int atime = 0; int ttime = 0; typedef struct { int x; int y; }TR; TR r[100]; int top = 0; TR s[100]; int top1 = 0; void dfs(int cur,int x) { if ( cur == n + 1 ) { int tot = atime + ttime; if ( tot < min ) { min = tot; top1 = top; for (int j = 0; j < top; j++) s[j] = r[j]; } return; } if ( cur == 0 ) { ttime += e1; dfs(1,0); ttime -= e1; ttime += e2; dfs(1,1); ttime -= e2; } if ( cur == n && x == 0 ) { atime += a[cur][x]; ttime += x1; r[top].x = cur; r[top].y = x; top++; dfs(cur + 1, 0); top--; ttime -= x1; atime -= a[cur][x]; } if ( cur == n && x == 1 ) { atime += a[cur][x]; ttime += x2; r[top].x = cur; r[top].y = x; top++; dfs(cur + 1, 0); top--; ttime -= x2; atime -= a[cur][x]; } if ( cur >= 1 && cur <= n - 1 ) { atime += a[cur][x]; r[top].x = cur; r[top].y = x; top++; dfs(cur + 1, x); top--; atime -= a[cur][x]; atime += a[cur][x]; ttime += t[cur][1 - x]; r[top].x = cur; r[top].y = x; top++; dfs(cur + 1, 1 - x); top--; ttime -= t[cur][1 - x]; atime -= a[cur][x]; } } int main() { n = 6; e1 = 2; e2 = 4; x1 = 3; x2 = 2; a[1][0] = 7; a[1][1] = 8; a[2][0] = 9; a[2][1] = 5; a[3][0] = 3; a[3][1] = 6; a[4][0] = 4; a[4][1] = 4; a[5][0] = 8; a[5][1] = 5; a[6][0] = 4; a[6][1] = 7; t[1][1] = 2; t[1][0] = 2; t[2][1] = 3; t[2][0] = 1; t[3][1] = 1; t[3][0] = 2; t[4][1] = 3; t[4][0] = 2; t[5][1] = 4; t[5][0] = 1; dfs(0,0); printf("The ans = %d\n",min); printf("The trace is :\n"); for (int i = 0; i < top1; i++) printf("(%d,%d) ",s[i].x,s[i].y); printf("\n"); return 0; }