假设当前旅行售货员的住地为1号城市,边上的权为城市之间的交通费用,要求从1号城市出发,到其它城市各去一次推销商品,然后再回到住地所花费的总交通费用最少的路线。(要求:做好搜索前的准备,然后用搜索树展示搜索过程)
2条回答 默认 最新
- 玥轩_521 2023-06-14 19:48关注
好的,下面是C++代码实现:
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 20; int n, m[N][N], f[1 << N][N]; int dp(int S, int u) //S表示状态集合,u表示当前所在的节点 { if (S == (1 << n) - 1 && u == 0) return 0; //若所有节点都遍历过,且到达了起始节点,则找到了答案,返回0。 if (~f[S][u]) return f[S][u]; //若该状态已经记忆化,直接返回 int res = 1e9; for (int i = 0; i < n; i++) { if (S & (1 << i)) continue; //节点已经遍历过 res = min(res, dp(S | (1 << i), i) + m[u][i]); //更新答案 } return f[S][u] = res; //记忆化 } int main() { cin >> n; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> m[i][j]; memset(f, -1, sizeof f); cout << dp(1, 0); //起点为1,状态为{1} return 0; }
该算法使用状态压缩和记忆化搜索实现,其中 $f[S][u]$ 表示走过状态集合 $S$,目前所在节点为 $u$ 的最小代价。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 100 内验证哥德巴赫巴赫猜想
- ¥15 需要在vitis下实现彩调视频图像累加,并输出
- ¥15 解决不了的LNK2019错误
- ¥20 MATLAB仿真三相桥式全控整流电路
- ¥15 EDA技术关于时序电路设计
- ¥15 百度文心一言流式返回sse失败
- ¥15 由于远程方已关闭传输流,身份验证失败
- ¥15 rt-detr,PCB,目标检测
- ¥15 有偿求指导实证代码。cfps清洗合并后,无论是构建平衡面板还是非平衡面板,都是只剩几百个样本量。求指导一下哪里出问题了,不要潦草回复
- ¥15 mutlinichenet