博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
回溯法
阅读量:6278 次
发布时间:2019-06-22

本文共 1703 字,大约阅读时间需要 5 分钟。

1.回溯法编程求解0-1背包问题

#include<stdio.h>

#include<iostream>

using namespace std;

int c,n;

int cv=0,cw=0,mv=0,mw=0;

int weight[20],value[20];

int x[20],bestv[20];

int backtrack(int t)

{

    int i;

    if(t>n)//回溯结束

    {

        if(cv>mv)

        {

           mv=cv;

           for(i=0;i<n;i++) bestv[i]=x[i];

        }

    }

    else

    {

        for(i=0;i<=1;i++)

        {

           x[t]=i;

           if(x[t]==0)

           {

               backtrack(t+1);

               x[t]=0;

           }

           else if((cw+weight[t]<=c)&&x[t]==1)

           {

               cv=cv+value[t];

               cw=cw+weight[t];

               backtrack(t+1);

               x[t]=0;

               cv=cv-value[t];

               cw=cw-weight[t];

           }

        }

    }

    return 0;

}

int main()

{

    int i;

    cout<<"背包容量:";

    cin>>c;

    cout<<"物品个数:";

    cin>>n;

    cout<<"各物品重量:";

    for(i=0;i<n;i++)

        cin>>weight[i];

    cout<<"各物品价值:";

    for(i=0;i<n;i++)

        cin>>value[i];

    backtrack(0);

    printf("回溯法得出物品为");

    for(i=0;i<n;i++)

        printf("%d  ",bestv[i]);

    cout<<endl<<"最大价值为:"<<endl<<mv;

    system("pause");

    return 0;

}

 

2.利用回溯法编程求解TSP问题

#include<iostream>

#include<algorithm>

using  namespace std;

int n;                          

int a[100][100];        

int x[100];                   

int best [100]  = {0};     

int bestp = 10000;             

int thistp = 0;       

//记录当前正在计算路径的费用

void TSP(int t){

          if(t>n){

        if((a[x[n]][1])&&(a[x[n]][1]+thistp<bestp)){

              bestp = a[x[n]][1]+ thistp;

              for(int i = 1;i<=n;i++){

                 best [i] = x[i];

              }

        }

     }else{

         for(int i = t;i<=n;i++){

            if((a[x[t-1]][x[i]])&&( thistp +a[x[t-1]][x[i]]<bestp)){

                swap(x[t],x[i]);  

                thistp +=a[x[t-1]][x[t]];

                TSP(t+1);

                thistp -=a[x[t-1]][x[t]];

                swap(x[t],x[i]);

            }

         }

    }

}

int main(){

    cout<<"输入城市个数:"<<endl;

    cin>>n;    

    for(int i = 1;i<=n;i++){

         x[i] = i;

    }

    cout<<"输入城市之间的距离(0表示城市间不通):"<<endl;

    for(int i = 1;i<=n;i++){

        for(int j = 1;j<=n;j++){

            cin>>a[i][j];

        }

    }

    TSP(2);

    cout<<"最少旅行费用为: "<<bestp<<endl;

    cout<<"旅行路径为:"<<endl;

    for(int i = 1;i<=n;i++){

       cout<<best [i]<<" ";

    }

cout<<best [1]<<endl;

system("pause");

    return 0;

}

转载于:https://www.cnblogs.com/wander-clouds/p/11037820.html

你可能感兴趣的文章
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>
程鑫峰:1.26特朗.普力挺美元力挽狂澜,伦敦金行情分析
查看>>
safari下video标签无法播放视频的问题
查看>>
01 iOS中UISearchBar 如何更改背景颜色,如何去掉两条黑线
查看>>
对象的继承及对象相关内容探究
查看>>
Spring: IOC容器的实现
查看>>
Serverless五大优势,成本和规模不是最重要的,这点才是
查看>>
Nginx 极简入门教程!
查看>>
iOS BLE 开发小记[4] 如何实现 CoreBluetooth 后台运行模式
查看>>
Item 23 不要在代码中使用新的原生态类型(raw type)
查看>>
为网页添加留言功能
查看>>
JavaScript—数组(17)
查看>>
Android 密钥保护和 C/S 网络传输安全理论指南
查看>>
以太坊ERC20代币合约优化版
查看>>
Why I Began
查看>>
同一台电脑上Windows 7和Ubuntu 14.04的CPU温度和GPU温度对比
查看>>
js数组的操作
查看>>