zoukankan      html  css  js  c++  java
  • TSP-旅行商问题

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int num = 0;
    int map[4][4] = {0,3,6,7,
    			    5,0,2,3,
    			    6,4,0,2,
    		    3,7,5,0
    		    };
    vector<int> s;
    			
    void run(int x,int pre,int sum,int pass[5])
    {
       int i,pass_flag = 1;
        //初始化副本
        int pass2[5];
        for(i = 0;i < 5;i++)
        {
            pass2[i] = pass[i];
            //cout << pass2[i] << endl;
        }
    
        //当前城市做上标记
        pass2[x] = map[pre][x];
    	
    	
    //设计出口  pass中的数据都不是-1  说明到过4个城市
    
    for(i = 0;i < 4;i++)
    {
    	if(pass2[i] == -1) 
    	{
    		pass_flag = 0;
    		break;
    	}
    		
    }
    if( pass_flag )
    {
    	//sum + 从最后一座城市返回起始城市
    	sum += map[x][0];
    	//将整个路程存放在向量s中
    	s.push_back(sum);
    
    	pass2[4] =  map[x][0];
    	//输出路线
    	cout << "路程方案" << ++num << endl;
    	for(i = 1;i < 5;i++)
    	{
    		cout << pass2[i] << "	" ;
    	}
    	cout << endl;
    }
    else
    {
    	
    	//加上从上一个城市到达本城市需要的路程
    	//sum += map[pre][x];
    	
    	for( i = 0;i < 4;i++ )
    	{
    		
    		//判断下一个城市是否已经到达过
    		if(pass2[i] == -1)
    		{
    			//没有达到过 便进行递归循环
    			run(i,x,sum+map[x][i],pass2);
    			//pass2[i] = 1;
    		 }
    	    }
        }
    }
    int main()
    {
    
    int x = 0;
    int y = 0;
    int pass[5] = {-1,-1,-1,-1,-1};
    //当前所在城市 走过路程 已经走过的城市
    run(x,x,0,pass);
    sort(s.begin(),s.end());
    cout << "最长:" << *(s.end()-1) << endl;
    cout << "最短:" << *s.begin() << endl;
    return 0;
    }
  • 相关阅读:
    数据库被挂马3
    將目標網址轉換成HTML
    四步堵死3b3.org c.js注入
    GBK与UTF8编码选择与区分
    C#连Oracle数据库
    Session过期时间的四种设置方式
    怎么从内容页访问母板页
    Response.Charset与Response.ContentEncoding的区别
    CommandBehavior.CloseConnection的使用
    尽可能的使用强类型
  • 原文地址:https://www.cnblogs.com/maskerk/p/7348849.html
Copyright © 2011-2022 走看看