POJ 3311 Hie with the Pie (TSP問題 狀壓DP解法)

來源:互聯網
上載者:User

TSP問題的狀態DP解法:

題意:從1點開始遍曆全圖的點後回到起點的最短路徑問題

因為TSP不限制每個點遍曆的次數,所以可以用floyd處理下兩點間的距離,之後DP處理下,

DP[i][j]表示狀態為二進位i下,當前遍曆第j個點的最小值,DP[1<<j][j]初始化為map[0][j]

 

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;const int maxn=12;const int maxm=1<<11|1;int n;int map[maxn][maxn];int dp[maxm][maxn];void floyd(){    for (int k=0 ; k<=n ; ++k)        for (int i=0 ; i<=n ; ++i)            for (int j=0 ; j<=n ; ++j)                if(map[i][j]>map[i][k]+map[k][j])                    map[i][j]=map[i][k]+map[k][j];}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);            }        floyd();        memset (dp , 63 , sizeof(dp));        for (int i=0 ; i<(2<<n) ; ++i)        {            for (int j=0 ; j<=n ; ++j)            {                dp[1<<j][j]=map[0][j];                //if(i==1<<j)dp[i][j]=map[0][j];這個和上面的語句都能AC                if(i&(1<<j))                    for (int k=0 ; k<=n ; ++k)                    {                        if((i-(1<<j)) & (1<<k))//第k位為1,第j位不為1的狀態                        dp[i][j]=min(dp[i-(1<<j)][k]+map[k][j],dp[i][j]);                    }                    //printf("%d %d %d\n",i,j,dp[i][j]);            }        }        int ans=dp[(2<<n)-1][0];        for (int i=1 ; i<=n ; ++i)        {            ans=min(dp[(2<<n)-1][i]+map[i][0],ans);        }        printf("%d\n",ans);    }    return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.