TSP

来源:互联网 发布:街霸5网络设置 编辑:程序博客网 时间:2024/05/04 14:27
#include<iostream>  #include<iomanip>  using namespace std;    int n;  int cost[20][20]={};  bool done[20]={1};  int start = 0; //从城市0开始    int imin(int num, int cur)  {      if(num==1) //递归调用的出口          return cost[cur][start];  //所有节点的最后一个节点,最后返回 最后一个节点到起点的路径        int mincost = 10000;      for(int i=0; i<n; i++)      {          cout<<i<<"  i:"<<done[i]<<endl;           if(!done[i] && i!=start) //该结点没加入 且 非起始点           {              if(mincost <= cost[cur][i]+cost[i][start])              {                  continue; //其作用为结束本次循环。即跳出循环体中下面尚未执行的语句。区别于break               }              done[i] = 1; //递归调用时,防止重复调用                            int value = cost[cur][i] + imin(num-1, i);                if(mincost > value)              {                  mincost = value;              }              done[i] = 0;//本次递归调用完毕,让下次递归调用          }      }      return mincost;  }    int main()  {  //  cin >> n;       n=4;       int cc[4][4]={{0 ,4, 1, 3},                 {4 ,0 ,2, 1},                 {1 ,2 ,0, 5},                     {3 ,1, 5, 0}};      for(int i=0; i<n; i++)      {          for(int j=0; j<n; j++)          {              //cin >> cost[i][j];              cost[i][j]=cc[i][j];          }      }        cout << imin(n, start) << endl;        return 0;  }  

0 0
原创粉丝点击