java - 如何在Java中为属于图的顶点提供坐标?
问题描述
我正在为一个需要尽快完成的项目构建一个简单的 GPS。为此,我需要实现 Dijkstra 的算法以使汽车遵循一定的路径,请参见此处的图像。该算法已经完成并且可以运行,但是我需要给顶点(交叉点)一些坐标,以便汽车知道去哪里。
如何给顶点 x 和 y 坐标?我知道回答这个问题可能很复杂,但我们将不胜感激任何帮助。提前致谢。
顶点类代码如下。不要介意法语 (vertices --> noeud) :
import java.util.ArrayList;
import java.util.List;
public class Noeud implements Comparable<Noeud> {
private String numero;//identifier les noeuds
private List<Route> listeVoisins;
private boolean visiter;
private Noeud predecesseur;//predecesseur du noeud
private double distance = Double.MAX_VALUE; //distance depuis la source
//initialiser toutes les distances a l'nfini (max_value est la plus grande valeur possible)
//il faut initiliaser la variable avec un valeur sinon elle sera mise a 0
public Noeud(String numero) { //est appelé par la methode DijkstraMain
this.numero = numero;
this.listeVoisins = new ArrayList<>();
}
public void ajoutVoisin(Route route) {
this.listeVoisins.add(route);
}
/*Getters & Setters*/
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public List<Route> getListeVoisins() {
return listeVoisins;
}
public void setListeVoisins(List<Route> listeVoisins) {
this.listeVoisins = listeVoisins;
}
public boolean estVisiter() {
return visiter;
}
public void setVisiter(boolean visiter) {
this.visiter = visiter;
}
public Noeud getPredecesseur() {
return predecesseur;
}
public void setPredecesseur(Noeud predecesseur) {
this.predecesseur = predecesseur;
}
public double getDistance() {
return distance;
}
public void setDistance(double distance) {
this.distance = distance;
}
@Override
public String toString() {//permet d'afficher les noms
return this.numero;
}
@Override // We need this method if we want to use PriorityQueues instead of LinkedLists to store our edges
public int compareTo(Noeud autreNoeud) {
return Double.compare(this.distance, autreNoeud.getDistance());//remplacer getDistance par distnace
}
}
这是创建顶点的Main 类:
public class DijkstraMain {
public static void main(String[] args) {
///create vertices
Noeud noeud1 = new Noeud("1");
Noeud noeud2 = new Noeud("2");
Noeud noeud3 = new Noeud("3");
Noeud noeud4 = new Noeud("4");
Noeud noeud5 = new Noeud("5");
Noeud noeud6 = new Noeud("6");
//Create graph
//Route poids, noeud s name, noeud d name
noeud1.ajoutVoisin(new Route(15,noeud1,noeud4));
noeud1.ajoutVoisin(new Route(7,noeud1,noeud2));
noeud2.ajoutVoisin(new Route(7,noeud2,noeud3));
noeud2.ajoutVoisin(new Route(15,noeud2,noeud5));
noeud3.ajoutVoisin(new Route(15,noeud3,noeud6));
noeud4.ajoutVoisin(new Route(7,noeud4,noeud5));
noeud5.ajoutVoisin(new Route(7,noeud5,noeud6));
DijkstraAlgo cheminOptimal = new DijkstraAlgo();
cheminOptimal.Algorithme(noeud1);
System.out.println("Plus court chemin du point de départ vers l'intersection les autres intersections");
System.out.println("\nDistance optimale vers l'intersection 2: "+noeud2.getDistance());
System.out.println("Distance optimale vers l'intersection 3: "+noeud3.getDistance());
System.out.println("Distance optimale vers l'intersection 4: "+noeud4.getDistance());
System.out.println("Distance optimale vers l'intersection 5: "+noeud5.getDistance());
System.out.println("Distance optimale vers l'intersection 6: "+noeud6.getDistance());
System.out.println("\nLes chemins choisis");
System.out.println("\nChemins choisis vers l'intersection 2: "+cheminOptimal.getShortestPathTo(noeud2));
System.out.println("Chemins choisis vers l'intersection 3: "+cheminOptimal.getShortestPathTo(noeud3));
System.out.println("Chemins choisis vers l'intersection 4: "+cheminOptimal.getShortestPathTo(noeud4));
System.out.println("Chemins choisis vers l'intersection 5: "+cheminOptimal.getShortestPathTo(noeud5));
System.out.println("Chemins choisis vers l'intersection 6: "+cheminOptimal.getShortestPathTo(noeud6));
}
}
解决方案
推荐阅读
- javascript - Firestore 并发事务冻结
- encryption - 在“Emit”阶段发生错误:不支持特定方法 Babel Obfuscator
- c++ - 如何在 C++ 中构造具有匹配数据类型的两对中的四个元素的元组?
- python - 浮点数(base-10)到 IEEE-754 32 位转换器的结果是错误的
- css - 在视频的左侧和右侧添加填充
- typescript - 为什么打字稿不会在原型函数中推断“this”的类型?
- java - 放心和弹簧 - 第一次测试后价值变为空
- ruby-on-rails - 在 Rails 中为数据库视图创建子记录时出现问题
- uima - 如何在 RUTA 中选择和设置覆盖/覆盖注释作为特征
- vba - 取消保护文档、运行子程序和保护文档时出现 VBA 错误(带有 if/thens 的范围似乎不起作用,但基本 if then 工作)