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();

}

}

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

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

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

  2. 一、为了OFFER系列 | 阿里云天池赛在线编程:移动的圆

    @Author:Runsen 大四刷题拼offer系列,不拼不行啊 关于:阿里云天池赛在线编程的介绍. 阿里云天池赛在线编程:在线编程限时赛,参与刷题,提升能力,奖品多多,助你晋级拿offer! 本人 ...

  3. 超10000支团队参赛,阿里云首届云原生编程挑战赛完美收官

    9月14日,阿里云首届云原生编程挑战赛决赛答辩完美落幕,10支进入决赛的团队用精彩的答辩,为历时4个月的大赛画下了圆满的句号.其中,greydog团队(董晓东,自由职业:董爽,中学教师)以出色的方案. ...

  4. 阿里Java开发手册之编程规约

    阿里Java开发手册之编程规约 对于程序员来说,编程规范可以养成良好的编程习惯,提高代码质量,降低沟通成本.就在2月9号,阿里出了一份Java开发手册(正式版),分为编程规约,异常日志,MySQL规约 ...

  5. python游戏编程入门书籍推荐-游戏编程入门书籍推荐:想要游戏编程尽快入门这些书不要错过...

    游戏编程一直都是编程之中的一大热点,这也是由于游戏本身的火热造成的结果,所以每年都有很多人在关注着游戏编程.介于此小编今天就来将一些好的游戏编程入门书籍推荐给大家,希望对想要了解和学习游戏编程的朋友能 ...

  6. 阿里云国际站:阿里云架构变革背后:刺破宁静 激活新增长

    阿里云正通过一场体系架构的变革,刺破行业宁静,重新定义下一代的云. 借此,它将不仅进一步奠定云计算.数字化技术底座基础,还将有望重新激活核心板块IaaS层.PaaS层的效能与高质量增长,大幅扩充技术增 ...

  7. 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路

    本文原始内容由作者"阳振坤"整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场 ...

  8. 安卓python编程app下载_Python编程教学app下载

    教学软件,在软件中,有着丰富多彩的教学资源等你前来领取,不仅如此,软件还有各种大牛名师来指导您的学习哦,感兴趣的朋友可千万不要错过了,赶紧前来下载吧! 软件介绍 app内容涵盖基础概念.控制结构.函数 ...

  9. 这就是面霸吗?仅半年拿到了阿里,美团,阿里等一线名企offer,附上面霸的面经!

    前言 最近一段时间面试了几家互联网公司,陆续通过了阿里.头条.美团,滴滴,京东的面试,基本上面试的公司都通过了,所以在这里想分享一些自己面试的经验给大家,希望能帮助大家拿到心仪的offer 我的基本情 ...

最新文章

  1. 渗透中寻找突破口的那些事
  2. express登录例子
  3. first level cache check - User parameter /UI2/CACHE_DISABLE
  4. Java 相同类型强制转换异常
  5. 每日算法系列【LeetCode 面试题 17.05】字母与数字
  6. springcloud ip部署_php接入SpringCloud微服务框架
  7. 华为hs8145v5刷机包_华为hs8145v5刷机包_华为P40 Pro(ELSAN00/TN00)官方11.0.0.155固件卡刷包强刷包救砖包...
  8. 学建模从软件开始,8款超级好用的3d建模软件
  9. 计算机电脑键盘英语,知识整理:计算机键盘指法练习(英语+数字)
  10. 智协云店通+BitCOO扶持TEAx加入4WiN.io全球互贸链 | 翼次元空间+Fund++
  11. 静态网页项目开发基础
  12. 金山病毒库自定义服务器,将金山毒霸10全功能版本(带离线病毒库)安装到离线电脑,操作方法!!!亲测可用...-爱毒霸交流论坛...
  13. 【VBA研究】用Ping命令测试IP地址是否通达
  14. OpenCV学习之基本概念
  15. FTDI for linux的安装指南
  16. Android鬼点子-自定义View就像PS
  17. html图片做成菱形,html – 使用css创建菱形叠加图像
  18. 硬件描述语言(HDL)基础——过程块
  19. Vue中阿拉伯数字与汉字的相互转换
  20. Android屏幕刷新——源码分析

热门文章

  1. 关于小米 Mi4 手机的评测
  2. C语言程序设计博客作业02
  3. 青海行--(7月28日)凯旋归程
  4. AutoJs UI版
  5. 亲和图信息管理联想发散思维
  6. Python进阶【第一篇】socket
  7. 查看mysql访问记录
  8. 来看看最全的“css布局”喽
  9. mysql语句将两列合并一列_mysql – SQL选择将两列合并为一列
  10. 甲骨文数据库购买的价格(一)