哈密顿回路的记忆化搜索做法

学术版

楼主你看咱俩名字相似(逃
by BeyondHeaven @ 2019-11-14 18:05:26


@[HN_0917](/user/77609) 我们名字相似但是实力我渣太多了
by wrpwrp @ 2019-11-14 18:08:47


@[HN_026](/user/139012) 窝的也许可以为您参考 ```cpp #include <bits/stdc++.h> #define N 1100005 using namespace std; const int INF = INT_MAX >> 1; int n, f[21][N], mp[21][21], maxf; int dfs(int p, int s) { if(p == n - 1) return s ? INF : 0; if(f[p][s]) return f[p][s]; f[p][s] = INF; for(int i = 0;i < n;i++) { if(i == p || !(s & (1 << i))) continue; int nv = mp[p][i] + dfs(i, s & ~(1 << i)); if(nv < f[p][s]) f[p][s] = nv; } return f[p][s]; } int main() { scanf("%d", &n); maxf = (1 << n) - 1; for(int i = 0;i < n;i++) for(int j = 0;j < n;j++) scanf("%d", mp[i] + j); printf("%d", dfs(0, maxf ^ 1)); return 0; } ```
by saxiy @ 2019-11-14 18:39:34


@[HN_026](/user/139012) 应该是判达的问题,改成 ```cpp if(now == n) return S ? ifff : 0; ``` 就好了
by saxiy @ 2019-11-14 18:47:32


如果是 ```cpp if(S==0) { if(now==n) return 0; else return 100000000; } ``` 可能不必要的计算就多了
by saxiy @ 2019-11-14 18:48:24


毕竟终点必须是n-1。
by saxiy @ 2019-11-14 18:48:56


@[saxiy](/user/133236) O(∩_∩)O谢谢问题已解决!!
by wrpwrp @ 2019-11-15 08:12:09


|