设dp状态为dp[i][j]为当前访问过的结点状态为i且当前停留点为j时的最短路径。用二进制存存储访问过的状态,访问过为1,否则为0。
#include#include #include #include using namespace std;const int inf=(1<<30);int map[12][12];int dp[1<<11][12],n;struct Status{ int i,j,v; Status(){} Status(int ii,int jj,int vv){i=ii,j=jj,v=vv;}}que[(1<<11)*12];int head,tail;void slove(){ while(head dp[tmp.i][tmp.j]) continue; for(int j=0;j<=n;j++){ int st=(1< tmp.v+map[tmp.j][j]){ dp[tst][j]=tmp.v+map[tmp.j][j]; que[tail++]=Status(tst,j,dp[tst][j]); } } } printf("%d\n",dp[(1<