TSP-旅行商問題

來源:互聯網
上載者:User

標籤:

#include <iostream>#include <cstring>#include <cstdlib>#include <climits>#include <vector>#define MAX_N 10int d[MAX_N][MAX_N];int dp[1<<MAX_N][MAX_N];int n;using namespace std;int dfs_tsp(int S, int v) {    if (dp[S][v] >= 0) {        return dp[S][v];    }    if ((1<<n)-1 == S && v == 0) {        return dp[S][v] = 0;    }        int res = INT_MAX/2;    for (int u=0; u<n; u++) {        if (!((S>>u) & 1)) {            res = min(res, dfs_tsp(S|(1<<u), u) + d[v][u]);        }    }    return dp[S][v] = res;}void dfs_path(int S, int v, vector<int>& path) {    if ((1<<n)-1 == S && v == 0) {        return;    }        int res = INT_MAX / 2;    int idx = -1;    for (int u=0; u<n; u++) {        int cdst = dp[S|(1<<u)][u] + d[v][u];        if (!((S>>u) & 1) && cdst < res) {            idx = u;            res = cdst;        }    }    path.push_back(idx);    dfs_path(S|(1<<idx), idx, path);}int main() {    n = 5;    memset(dp, -1, sizeof(dp));    for (int i=0; i<n; i++) {        for (int j=0; j<n; j++) {            d[i][j] = INT_MAX/2;        }    }        d[0][1] = 3;    d[0][3] = 4;    d[4][0] = 7;    d[4][1] = 6;        d[3][4] = 3;    d[2][0] = 4;    d[2][3] = 5;    d[1][2] = 5;                int dst = dfs_tsp(0, 0);    cout<<dst<<endl;    vector<int> path(1,0);    dfs_path(0, 0, path);        for (int e:path) {        cout<<e<<" ";    }    system("pause");    return 0;}

挑戰程式設計P193. 其實還可以反向著來,不過實現起來比這個稍煩一些。

TSP-旅行商問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.