标签:class 遍历 pre linked color 广度 添加 广度优先 imp
不得不说字节还是很难进的,提前批算是去试了一个水,自己的算法功底,还远远达不到要求,对操作系统,java虚拟机,多线程,进程等知识还有很大的欠缺,深度还远远不够,所以还是努力的刷题吧,希望秋招能顺利进入字节。
以下是主要问到的问题:
进程的信号量,线程的信号量,线程的中断, B+ 树,
手撕了一道算法题,最好的解法应该是Djistra算法,广度优先遍历,但当时我没有想到,以下是我的解答
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
/**
* 问题描述: 已知有6个村庄,分别为 A B C D E F 对应的编号分别是0-5
* 已知村庄之间的距离分别为:
* (0,1,5) 村庄A与B之间距离5 公里
* (0,2,1)
* (0,3,8)
* (1,2,6)
* (1,4,4)
* (2,3,3)
* (2,4,1)
* (3,4,1)
* (3,5,1)
* (4,5,4)
* 现在需要找到一条路,从A 村庄,到达 F村庄的,使得这个经过的总的路径最短,求这个最短路径
* */
public class Prob11 {
public static void main(String[] args){
byteDance obj = new byteDance(6);
obj.insertPoint("A");
obj.insertPoint("B");
obj.insertPoint("C");
obj.insertPoint("D");
obj.insertPoint("E");
obj.insertPoint("F");
obj.insertWay(0,1,5);
obj.insertWay(0,2,1);
obj.insertWay(0,3,8);
obj.insertWay(1,2,6);
obj.insertWay(1,4,4);
obj.insertWay(2,3,3);
obj.insertWay(2,4,1);
obj.insertWay(3,4,1);
obj.insertWay(3,5,1);
obj.insertWay(4,5,4);
for(int i=0;i<obj.getCountOfTower();i++){
obj.fn(i);
}
for(int i=obj.getCountOfTower()-1;i>-1;i--){
obj.fn(i);
}
System.out.println(Arrays.toString(obj.getLengths()));
System.out.println("从A村庄到F村庄的最短路径距离是 : "+ obj.getLengths()[5]);
}
}
class byteDance{
private ArrayList<String> towers;
private int[][] ways;
private Queue<Integer> records;
private int[] lengths;
public byteDance(int n ){
towers = new ArrayList<>();
ways = new int[n][n];
records = new LinkedList<>();
lengths = new int[n];
for(int i=1;i<n;i++){
lengths[i] = 100;
}
}
// 添加顶点
public void insertPoint(String towerName){
towers.add(towerName);
}
// 添加边
public void insertWay(int n1,int n2,int length ){
ways[n1][n2] = length;
ways[n2][n1] = length;
}
public void fn(int index ){
int temp = 0;
for(int i=0;i<ways.length;i++){
if(ways[index][i] > 0 ){ // 说明 村庄 index 和 i 之间有一条路 ,路的长度是 ways[index][i]
temp = lengths[index] + ways[index][i];
if( temp < lengths[i] ){
lengths[i] = temp;
}
}
}
}
public int getCountOfTower(){
return towers.size();
}
public int[] getLengths(){
return lengths;
}
}
标签:class 遍历 pre linked color 广度 添加 广度优先 imp
原文地址:https://www.cnblogs.com/1832921tongjieducn/p/13288082.html