void BackTrack(int t)
{
//都装载了
if(t>n){
//printf("%d\n",cw);
if(cw > bestw)//当前车辆载重量>当前最优载重量
{
for(int i = 1; i <= n; i++)//遍历当前解
{
/*if(x[i])//若有装入
bestx[i] = i;//放入当前最优解
else*/
bestx[i]=x[i];//放入当前最优解
}
bestw = cw;//当前最优载重量=当前车辆载重量
return;
}
}
else
{
r -= w[t]; //更新剩余书重量
if(cw + w[t] <= c1){ //没有超出载重量,判断是否可以向装载 当前车辆载重+当前书重量<=c1
x[t] = 1;
cw += w[t];
//printf("左:%d %d\n",t,bestw);
BackTrack(t+1);
cw -= w[t]; //cw要还原原先的载重,因为还要判断其他路线才能找到最优解
}
if(cw + r > bestw){ //判断是否可以向右(当前车辆载重量+剩余书重量>当前最优载重量)
//printf("右:%d %d\n",t,bestw);
x[t] = 0;
BackTrack(t+1);
}
r += w[t]; //还原剩余书重量走其他路线(剩余书重量+=w[t])
}
}
回溯算法时间复杂度问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 於黾 2022-07-07 09:56关注
首先,这是个递归
递归里有两个分支,如果t>n,执行一个循环,循环次数为n
else,执行递归,t+1
那么其实就相当于双重for循环,内外层循环次数都是n
时间复杂度n^2本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 smptlib使用465端口发送邮件失败
- ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
- ¥15 对于squad数据集的基于bert模型的微调
- ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
- ¥20 steam下载游戏占用内存
- ¥15 CST保存项目时失败
- ¥15 树莓派5怎么用camera module 3啊
- ¥20 java在应用程序里获取不到扬声器设备
- ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
- ¥15 Attention is all you need 的代码运行