📄 map.java
字号:
package shiyan3;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
public class Map implements Serializable {
private List2D map;
private ArrayList<String> idList;
public Map(){
map=new List2D();
idList=new ArrayList<String>();
}
public void addDot(String id,int[] length){
map.addDot(length);
idList.add(id);
}
public void addDot(){
map.addDot();
}
public void addLine(int dot1,int dot2,int length){
map.addLine(dot1, dot2, length);
}
public void deleteDot(int index){
map.deleteDot(index);
idList.remove(index);
}
public void deleteDot(String id){
int index=idList.indexOf(id);
idList.remove(index);
}
public int getSize(){
return map.size();
}
public ArrayList<Integer> getArray(int index){
return map.getArray(index);
}
public ArrayList<Integer> getPath(int dot1,int dot2){
ArrayList<Integer> preDot=new ArrayList<Integer>();//记录先序点
ArrayList<Integer> d=new ArrayList<Integer>();//记录最短距离
ArrayList<Integer> dotArray=new ArrayList<Integer>();
for (int i = 0; i < map.size(); i++) {//初始化predot
preDot.add(-1);
d.add(-1);
if(map.getLength(dot1, i)>0){
dotArray.add(i);
}}
preDot.set(dot1, dot1);
d.set(dot1, 0);
/*依次取出与已经确定最短路径相连并且还没有确定最小路径的点中,
* 计算(d+这个路径)并找到最短的那条加到以确定路径的数组中,
* 依次计算,直到dot2也在这个数组中为止
*/
while(preDot.get(dot2)==-1){
int minD=Integer.MAX_VALUE;
int indexj=-1;
int indexi=-1;
for (int i = 0; i < map.getArray(0).size(); i++) {
if (d.get(i)!=-1) {
for (int j = 0; j < map.getArray(i).size(); j++) {
if (map.getArray(i).get(j)!=-1&&d.get(j)==-1&&d.get(i)
+map.getLength(i, j)<minD) {
minD=d.get(i)+map.getLength(i, j);
indexj=j;
indexi=i;
}
}
}
}
preDot.set(indexj, indexi);
d.set(indexj, minD);
}
int dot=dot2;
ArrayList<Integer> result=new ArrayList<Integer>();//输出点的顺序
result.add(dot);
while(dot!=dot1){
dot=preDot.get(dot);
result.add(dot);
}
for (int i = 0; i < result.size()/2; i++) {
int j=result.size()-i-1;
int mid=result.get(j);
result.set(j, result.get(i));
result.set(i, mid);
}
return result;
}
public static void main(String[] args) throws IOException {
Map m=new Map();
m.addDot("A", new int[]{0});
m.addDot("B", new int[]{33});
m.addDot("C", new int[]{-1,34});
m.addDot("D", new int[]{-1,-1,49});
m.addDot("E", new int[]{-1,-1,65,32});
System.out.println(m.getPath(4,0));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -