博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
旅行售货员问题
阅读量:4188 次
发布时间:2019-05-26

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

某售货员要到若干城市去推销商品,已知各城市之间的路程,他要选定一条从驻地出发,经过每个城市一遍,最后

回到住地的路线,使总的路程最短。

解题思路:先对所有城市全排列 ,再计算每条路径的花费,取最小值。

int MinCost = Integer.MAX_VALUE; // 花费	/**	 * @param route 路线花费	 * @param city  城市编号	 * @param cost  每条路线的花费	 * @param cityNumlist  路线的城市编号	 * @param k   起始位置	 * @param m   结束位置(该题目假设由终止位置可直达起点)	 * @return 总花费最小的路线顶点	 */	ArrayList
bakctrack(int[][] route, int[] city, int cost, ArrayList
cityNumlist, int k, int m) { int i = 0; // 产生nums[k:m]的所有排列 if (k == m) { for (i=1; i<=m; i++) { cost += route[city[i-1]][city[i]]; } // 再加上返回路径 cost += route[city[m]][city[0]]; if (cost < MinCost) { MinCost = cost; if (cityNumlist != null) cityNumlist.clear(); // 清空原来的编号 for (int j=0; j<=m; ++j) { cityNumlist.add(city[j]+1); // 将城市编号放入集合中 } } cost = 0; } else { // 还有多少个元素待排列,递归产生排列 for (i=k; i<=m; i++) { swap(city, i, k); bakctrack(route, city, cost, cityNumlist, k+1, m); swap(city, i, k); } } return cityNumlist; } // 交换元素 public void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } public ArrayList
smallCost(int[][] route, int[] city) { ArrayList
cityNum = bakctrack(route, city, 0, new ArrayList<>(), 0, city.length-1); return cityNum; }

 

转载地址:http://vcpoi.baihongyu.com/

你可能感兴趣的文章
构建OpenStack的云基础架构:ManageIQ(转)
查看>>
云管理软件 ManageIQ(转)
查看>>
CentOS 7.0,启用iptables防火墙(转)
查看>>
DISCUZ浅析之COOKIE篇
查看>>
实战DDD(Domain-Driven Design领域驱动设计:Evans DDD)
查看>>
SSH中各个框架的作用以及Spring AOP,IOC,DI详解
查看>>
openstack juno 配置vmware(vcenter、vsphere)
查看>>
远程debug调试(eclipse)之openstack windows
查看>>
PAAS平台对比:OpenShift VS CloudFoundry【51CTO调研报告】
查看>>
JAX-RS(java restful实现讲解)(转)
查看>>
Spring MVC与JAX-RS比较与分析
查看>>
openstack官方docker介绍
查看>>
头痛与早餐
查看>>
[转]在ASP.NET 2.0中操作数据::创建一个数据访问层
查看>>
Linux命令之chmod详解
查看>>
【java小程序实战】小程序注销功能实现
查看>>
linux下文件夹的创建、复制、剪切、重命名、清空和删除命令
查看>>
pentaho套件
查看>>
软件产品经理职责
查看>>
Linux下Tomcat的安装配置
查看>>