阿里面试题(练习)
题目:
如下图,某物流派送员p,需要给 a、b、c、d. 4个快递点派送包裹,请问派送员需要选择什么样的路线,才能完成最短路程的派送。假设如图派送员的起点坐标(0,0),派送路线只能沿着图中的方格边行驶,每个小格都是正方形,且边长为1,如p到d的距离就是4。随机输入n个派送点坐标,求输出最短派送路线值(从起点开始完成n个点派送并回到起始点的距离)

输入示例:
4
2,2
2,8
4,4
7,2
输出:
30
Java实现:
package interview.tree.interview; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * 简单实现思路:BFS+回溯,任意一点开始,算到下一点的距离,置标;逐次迭代递归。 */ public class Main { static final Point START = new Point(0, 0); static int minpath = Integer.MAX_VALUE; private static int min = 1000; public static final Point start = new Point(0, 0); public static int calculate(Point point, Point[] points, int sum, int count) { for (int i = 0; i < points.length; i++) { if (points[i].visited == false) { points[i].visited = true; count++; sum += point.getLength(points[i]); if (count == points.length) { sum += points[i].getLength(start); if (sum < min) { min = sum; } } calculate(points[i], points, sum, count); points[i].visited = false; sum -= point.getLength(points[i]); count--; } } return min; } public static void main(String[] args) { List<Point> points = new ArrayList<>(); Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in))); int t = Integer.parseInt(in.nextLine().trim()); // Scanner has functions to read ints, longs, strings, chars, etc. String inputPoint; for (int i = 1; i <= t; ++i) { inputPoint = in.nextLine(); String[] coord = inputPoint.trim().split(","); Point newPooint = new Point(Integer.parseInt(coord[0]),Integer.parseInt(coord[1])); points.add(newPooint); } int min = calculate(START, (Point[]) points.toArray(new Point[points.size()]), 0, 0); System.out.println(min); } } class Point { int px; int py; boolean visited; public Point(int px, int py) { this.px = px; this.py = py; this.visited = false; } public int getLength(Point p) { return Math.abs(px - p.px) + Math.abs(py - p.py); } }
专注搬砖,擅长搬砖砸自己的脚~~~
Email:
ltwbuaa@163.com

浙公网安备 33010602011771号