TSP问题(状压DP+Floyd解决方式)

来源:互联网 发布:将拍成网络剧的小说 编辑:程序博客网 时间:2024/06/16 12:50

目标算法:状态压缩DP+Floyd

应用范围:TSP

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int map[12][12];int dp[1<<11][12];int n,ans,Min;const int Inf = 0x3f3f3f;int main(){    while(~scanf("%d",&n) && n)    {        for(int i=0;i<=n;i++)        {            for(int j=0;j<=n;j++)            {                scanf("%d",&map[i][j]);            }        }        for(int k=0;k<=n;k++)        {            for(int i=0;i<=n;i++)            {                for(int j=0;j<=n;j++)                {                    map[i][j] = min(map[i][j],map[i][k]+map[k][j]);                }            }        }        for(int s=0;s<=(1<<n)-1;s++)        {            for(int i=1;i<=n;i++)            {                if(s & (1<<(i-1)))                {                    if(s == (1<<(i-1))) dp[s][i] = map[0][i];                    else                    {                        dp[s][i] = Inf;                        for(int j=1;j<=n;j++)                        {                            if(s & (1<<(j-1)) && j != i)                                dp[s][i] = min(dp[s^(1<<(i-1))][j]+map[j][i],dp[s][i]);                        }                    }                }            }        }        ans  = dp[(1<<n)-1][1] + map[1][0];        for(int i=2;i<=n;i++)        {            if(dp[(1<<n)-1][i] + map[i][0] < ans)                ans = dp[(1<<n)-1][i] + map[i][0];        }        printf("%d\n",ans);    }}


0 0
原创粉丝点击