N个城市,要求走一条最短的回路

问题特殊之处在于距离的定义。

在这种情况下,两个城市组成一个矩形,如果矩形内包含其它点,根据贪心法,肯定不能直接从左上角走到右下角,那样会白白错过一些城市。

import java.util.Arrays;
import java.util.Scanner;public class Main {
class Point {int x, y;Point(int x, int y) {this.x = x;this.y = y;}
}//最终的答案
int ans = Integer.MAX_VALUE;
//visited[i]表示第i个地点被访问过
boolean visited[];
//存储全部地点
Point[] a;
//起点
Point start = new Point(0, 0);//求两个点之间的距离
int getDis(Point x, Point y) {return Math.abs(x.x - y.x) + Math.abs(x.y - y.y);
}/*** 递归求解** @param cur        当前所在位置* @param dis        当前已经走过的距离* @param visitCount 已经访问的城市个数,用来记录递归终点**/
void go(Point cur, int dis, int visitCount) {if (visitCount == visited.length) {//如果已经访问完了,更新答案ans = Math.min(ans, dis + getDis(start, cur));}//利用到起点的距离剪枝if (dis > ans) {return;}//利用到终点的距离剪枝if (dis + getDis(cur, start) > ans) {return;}//对于每个未曾访问的城市进行处理for (int i = 0; i < visited.length; i++) {if (!visited[i]) {visited[i] = true;go(a[i], dis + getDis(cur, a[i]), visitCount + 1);visited[i] = false;}}
}Main() {Scanner cin = new Scanner(System.in);int n = cin.nextInt();a = new Point[n];visited = new boolean[n];for (int i = 0; i < n; i++) {int pos[] = Arrays.stream(cin.next().split(",")).mapToInt(Integer::parseInt).toArray();a[i] = new Point(pos[0], pos[1]);}go(new Point(0, 0), 0, 0);System.out.println(ans);
}public static void main(String[] args) {new Main();
}
}

转载于:https://www.cnblogs.com/weiyinfu/p/9462889.html

2018阿里编程测验题:最短汉密尔顿回路相关推荐

  1. 2018Java阿里编程测验_2018阿里编程测验题:最短汉密尔顿回路

    N个城市,要求走一条最短的回路 问题特殊之处在于距离的定义. 在这种情况下,两个城市组成一个矩形,如果矩形内包含其它点,根据贪心法,肯定不能直接从左上角走到右下角,那样会白白错过一些城市. impor ...

  2. 最短汉密尔顿回路算法c语言,【算法】浅谈最短哈密尔顿回路类问题的两种近似算法...

    // 标题是糊弄人的 1. 问题引入 给出一张图,求其最短哈密尔顿回路,也就是 "旅行商问题"(Traveling Saleman Problem,TSP) 假设有一个旅行商人要拜 ...

  3. 阿里巴巴-笔试前的测验题:星球大战

    题目要求: 阿里笔试前的编程测验题,具体的题目要求很长,我已经给忘记了,大概意思就是,给你一个由0和1组成的矩阵,例如下面这个矩阵: maps = [[1, 1, 0, 1, 1, 0, 0],[1, ...

  4. 汉密尔顿回路 (25 分)【思路讲解】

    立志用最少的代码做最高效的表达 著名的"汉密尔顿(Hamilton)回路问题"是要找一个能遍历图中所有顶点的简单回路(即每个顶点只访问 1 次).本题就要求你判断任一给定的回路是否 ...

  5. 计算机原理课堂,计算机原理课堂测验题集.ppt

    计算机原理课堂测验题集.ppt (31页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 <计算机组成原理>课堂测验题(1)F1○ ...

  6. 2018校招笔试真题汇总(javaC++)

    科大讯飞: 2018秋招笔试科大讯飞java笔试试题 https://www.nowcoder.com/discuss/67684?type=2&order=3&pos=13& ...

  7. 2018校招笔试真题汇总(java/C++)

    科大讯飞: 2018秋招笔试科大讯飞java笔试试题 https://www.nowcoder.com/discuss/67684?type=2&order=3&pos=13& ...

  8. 软件工程测验题+作业题【第1、4-8章】

    软件工程_第1-8章 第一章:初识软件工程 第四章:软件开发过程 第五章:团队开发管理 第六章:敏捷开发与配置管理 第6章测验题 第6章作业题 第七章:需求获取 第八章:用例建模 学堂在线慕课< ...

  9. 定位当前位置(坐标点)到 附近多个位置(坐标点)最短路径动态规划(汉密尔顿回路算法整合百度地图API)

    最近项目中需要实现这样一个功能:从当前位置,规划一条最优线路到附近多个工厂的最优线路.必须要有详细的路径坐标点信息. 思路:1.首先 使用汉密尔顿回路算法,求解出当前位置坐标点到附近工厂最短线路的路径 ...

最新文章

  1. 连接centos7桌面方法
  2. 【蓝桥杯】【入门题】【算法提高VIP】1481:剪刀石头布
  3. 微信小游戏「跳一跳」技术手段高分秘籍实现
  4. MySQL批量更新死锁案例分析--转载
  5. 深度学习领域专业词汇_深度学习时代的人文领域专业知识
  6. 2-10 [搞定!]出栈序列的合法性 (20 分)
  7. c++ stack 遍历_划重点啦!带你解读图的两种遍历方式
  8. 如何优雅的升级内核?
  9. Android 学习笔记(十五):Activity-GalleryView
  10. psvimg格式PSV存档文件解包工具psvimgtools在macOS环境下的使用教程
  11. [LeetCode] 707.设计链表
  12. 离散数学 之 命题公式的主析取合取范式(java实现)
  13. 微信小助手插件WeChatTweak
  14. revo加密_使用Revo Uninstaller完全卸载程序以及更多其他功能
  15. MSDC 4.3 接口规范(26)
  16. 双目视觉三维重构(一)————简介
  17. Leetcode 1144
  18. 阿诺德·施瓦辛格的演讲(拼命才会优秀,自律才会自由~)
  19. Redis 设计与实现 1:数据库 redisDb
  20. WPT、WPCN、SWIPT的区别与联系

热门文章

  1. 2017黑色主题 server sql_王智好美,一袭黑色亮片吊带长裙,造型简约大气,时尚优雅...
  2. [LuoguP1352][FJSC]没有上司的舞会
  3. EJB Remote/Local 绑定和JNDI Lookup
  4. xargs 将标准输入转换成命令行参数
  5. RAID一个硬盘FAIL。
  6. MFC多国语言——资源副本
  7. Logback的配置说明
  8. 对路径“xxxx”的访问被拒绝
  9. IDEA 2020 配置 Maven 创建 Spring Boot 项目
  10. awk之printf及相关参数详解