最后一分钟把题粘了下来,去网上一搜竟然早就有人做过了,自己火急火燎的,做的不太好,好多变量声明的位置不对影响性能,但是心里只想着做出答案,没考虑变量位置的问题,通过了80%的样例,心里很是不舒服的感觉。一是自己没通过,二是想到会不会有人。。。通过这样的办法直接过了这题。
如图,某物流派送员p,需要给a、b、c、d4个快递点派送包裹,请问派送员需要选择什么的路线,才能完成最短路程的派送。假设如图派送员的起点坐标(0,0),派送路线只能沿着图中的方格边行驶,每个小格都是正方形,且边长为1,如p到d的距离就是4。随机输入n个派送点坐标,求输出最短派送路线值(从起点开始完成n个点派送并回到起始点的距离)
把自己的代码晒出来吧,交完卷也没想到哪种情况下我的代码是不对的。我自己在想想,也希望有人发现问题能给我留言。
ali基本凉了
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;
/*
*
* 如图,某物流派送员p,需要给a、b、c、d4个快递点派送包裹,请问派送员需要选择什么的路线,
* 才能完成最短路程的派送。假设如图派送员的起点坐标(0,0),派送路线只能沿着图中的方格边行驶,
* 每个小格都是正方形,且边长为1,如p到d的距离就是4。随机输入n个派送点坐标,求输出最短派送路线值(从起点开始完成n个点派送并回到起始点的距离)
*/
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int left=0;
int right=0;
int sum=0;
Map<Integer,Integer> map=new TreeMap<Integer,Integer>();
for(int i=0;i<n;i++){
String str=scan.next();
String []s=str.split(",");
left=Integer.parseInt(s[0]);
right=Integer.parseInt(s[1]);
map.put(left, right);
}
int preKey=0;
int preValue=0;
int key =0;
int value =0;
Set<Entry<Integer,Integer>> set = map.entrySet();
for(Entry<Integer,Integer> entry : set){
key = entry.getKey();
value = entry.getValue();
int result=Math.abs(key-preKey)+Math.abs(value-preValue);
sum+=result;
preKey=key;
preValue=value;
}
sum=sum+key+value;
System.out.println(sum);
}
}