华为笔试题
程序员文章站
2022-07-13 14:20:18
...
import java.lang.Math;
import java.util.Scanner;
public class abc {
public static int pathLength=1<<16;
public boolean []visited={false,false,false,false,false,false,false,false,false,false};
// n = 10
public void setPathLength(int a){
this.pathLength=a;
}
public int getPathLength(){
return this.pathLength;
}
public void rnn(int n, int []arry, int index,int pathlen,boolean []visited,int x,int y){
if(index==n/2-1){
for(int i =0;i<n;i+=2){
if(!visited[i]){
int res= d2(arry[i],arry[i+1],x,y);
int todest=d2(0,0,arry[i],arry[i+1]);
int total=pathlen+res+todest;
if(total<pathLength){
pathLength = total;
}
return;
}
}
}
if(index>n/2-1)
return;
for(int i =0;i<n;i=i+2){
if(!visited[i]){
visited[i]=true;
visited[i+1]=true;
int res= d2(arry[i],arry[i+1],x,y);
rnn(n, arry, index+1, pathlen+res,visited,arry[i],arry[i+1]);
visited[i]=false;
visited[i+1]=false;
}
}
}
public int d2(int x1,int y1,int x2,int y2){
int res=(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return res;
}
public static void main(String[] args) {
//TODO input and invoke rnn().
int n = 10;
int arry[]=new int[10];
System.out.println("请以此输入五个点的x和y值:");
Scanner sc = new Scanner(System.in);
for(int i =0;i<n;i++){
arry[i] = sc.nextInt();
}
abc b = new abc();
b.rnn(n, arry, 0,0,b.visited,0,0);
System.out.print("最短路径结果为:");
System.out.print(pathLength);
}
}
以上是华为笔试题中小蜜蜂去ABCDE五个点,采蜜回来一圈最短路径的计算代码。