状态压缩 CSU1129 送货到家
多组数据 n
n*n 邻接矩阵
dp[i][j] 以i结束的到j状态的最短的路径
过的有点莫名
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> using namespace std; #define MAXN 1<<15 #define inf 100000000 int dp[16][MAXN+2]; int x[16][16]; int main() { int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&x[i][j]); int en=1<<n; for(int i=0;i<n;i++) for(int j=0;j<en;j++) dp[i][j]=inf; dp[0][0]=0; for(int i=0;i<en;i++) { for(int j=0;j<n;j++) { for(int k=0;k<n;k++) //转移一下 没出现过这条边又存在 { if((!(i&(1<<k)))&&x[j][k]) dp[k][i|(1<<k)]=min(dp[k][i|(1<<k)],dp[j][i]+x[j][k]); } } } en--; if(dp[0][en]==inf) printf("NoAnswer\n"); else printf("%d\n",dp[0][en]); } return 0; }
posted on 2016-12-06 21:26 HelloWorld!--By-MJY 阅读(127) 评论(0) 编辑 收藏 举报