2018阿里编程测验题:最短汉密尔顿回路
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阿里编程测验题:最短汉密尔顿回路相关推荐
- 2018Java阿里编程测验_2018阿里编程测验题:最短汉密尔顿回路
N个城市,要求走一条最短的回路 问题特殊之处在于距离的定义. 在这种情况下,两个城市组成一个矩形,如果矩形内包含其它点,根据贪心法,肯定不能直接从左上角走到右下角,那样会白白错过一些城市. impor ...
- 最短汉密尔顿回路算法c语言,【算法】浅谈最短哈密尔顿回路类问题的两种近似算法...
// 标题是糊弄人的 1. 问题引入 给出一张图,求其最短哈密尔顿回路,也就是 "旅行商问题"(Traveling Saleman Problem,TSP) 假设有一个旅行商人要拜 ...
- 阿里巴巴-笔试前的测验题:星球大战
题目要求: 阿里笔试前的编程测验题,具体的题目要求很长,我已经给忘记了,大概意思就是,给你一个由0和1组成的矩阵,例如下面这个矩阵: maps = [[1, 1, 0, 1, 1, 0, 0],[1, ...
- 汉密尔顿回路 (25 分)【思路讲解】
立志用最少的代码做最高效的表达 著名的"汉密尔顿(Hamilton)回路问题"是要找一个能遍历图中所有顶点的简单回路(即每个顶点只访问 1 次).本题就要求你判断任一给定的回路是否 ...
- 计算机原理课堂,计算机原理课堂测验题集.ppt
计算机原理课堂测验题集.ppt (31页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 <计算机组成原理>课堂测验题(1)F1○ ...
- 2018校招笔试真题汇总(javaC++)
科大讯飞: 2018秋招笔试科大讯飞java笔试试题 https://www.nowcoder.com/discuss/67684?type=2&order=3&pos=13& ...
- 2018校招笔试真题汇总(java/C++)
科大讯飞: 2018秋招笔试科大讯飞java笔试试题 https://www.nowcoder.com/discuss/67684?type=2&order=3&pos=13& ...
- 软件工程测验题+作业题【第1、4-8章】
软件工程_第1-8章 第一章:初识软件工程 第四章:软件开发过程 第五章:团队开发管理 第六章:敏捷开发与配置管理 第6章测验题 第6章作业题 第七章:需求获取 第八章:用例建模 学堂在线慕课< ...
- 定位当前位置(坐标点)到 附近多个位置(坐标点)最短路径动态规划(汉密尔顿回路算法整合百度地图API)
最近项目中需要实现这样一个功能:从当前位置,规划一条最优线路到附近多个工厂的最优线路.必须要有详细的路径坐标点信息. 思路:1.首先 使用汉密尔顿回路算法,求解出当前位置坐标点到附近工厂最短线路的路径 ...
最新文章
- 连接centos7桌面方法
- 【蓝桥杯】【入门题】【算法提高VIP】1481:剪刀石头布
- 微信小游戏「跳一跳」技术手段高分秘籍实现
- MySQL批量更新死锁案例分析--转载
- 深度学习领域专业词汇_深度学习时代的人文领域专业知识
- 2-10 [搞定!]出栈序列的合法性 (20 分)
- c++ stack 遍历_划重点啦!带你解读图的两种遍历方式
- 如何优雅的升级内核?
- Android 学习笔记(十五):Activity-GalleryView
- psvimg格式PSV存档文件解包工具psvimgtools在macOS环境下的使用教程
- [LeetCode] 707.设计链表
- 离散数学 之 命题公式的主析取合取范式(java实现)
- 微信小助手插件WeChatTweak
- revo加密_使用Revo Uninstaller完全卸载程序以及更多其他功能
- MSDC 4.3 接口规范(26)
- 双目视觉三维重构(一)————简介
- Leetcode 1144
- 阿诺德·施瓦辛格的演讲(拼命才会优秀,自律才会自由~)
- Redis 设计与实现 1:数据库 redisDb
- WPT、WPCN、SWIPT的区别与联系
热门文章
- 2017黑色主题 server sql_王智好美,一袭黑色亮片吊带长裙,造型简约大气,时尚优雅...
- [LuoguP1352][FJSC]没有上司的舞会
- EJB Remote/Local 绑定和JNDI Lookup
- xargs 将标准输入转换成命令行参数
- RAID一个硬盘FAIL。
- MFC多国语言——资源副本
- Logback的配置说明
- 对路径“xxxx”的访问被拒绝
- IDEA 2020 配置 Maven 创建 Spring Boot 项目
- awk之printf及相关参数详解