gpt4 book ai didi

java - org.graphstream.algorithm.APSP$APSPInfo.getShortestPathTo 处的 NullPointerException - 图形问题

转载 作者:行者123 更新时间:2023-12-02 08:47:55 24 4
gpt4 key购买 nike

我正在开发一种算法来查找两个机场之间的最佳路线。我遇到了All Pairs Shortest Path (APSP)的概念和 GraphStream图书馆。

内容是从文本文件中读取的。每条线代表一个航空公司中途停留地:

PEK,LAX,5
ATL,HND,75
ATL,LAX,20
DXB,HND,5
ATL,PEK,10
PEK,HND,40
LAX,DXB,20
ATL,DXB,55

因为这是一个涉及机票的问题,所以我将第三列称为“价格”,但是当我尝试将实际价格值放入其中时,某些路线停止运行。此外,其中一项功能是向文件添加新行。我在为新的中途停留添加所需的任何值时遇到问题。

阅读a StackExchange's Math forum thread ,在创建图形字符串之前,我尝试将所有值除以最大权重,但没有成功:

String graphString;
String graphStringHeader = "DGS004\nmy 0 0\n";
String graphStringNodes = "";
String graphStringEdges = "";

BigDecimal biggestPrice = BigDecimal.ZERO;

while (stLines.hasMoreTokens()) {
line = stLines.nextToken(System.getProperty("line.separator"));

final StringTokenizer stColumns = new StringTokenizer(line);

Airport originAux = null;
Airport destinationAux = null;
BigDecimal priceAux = null;

String column;
Integer columnIndex = 1;

while (stColumns.hasMoreTokens()) {
column = stColumns.nextToken(",");

if (columnIndex == 1) {
originAux = new Airport(column);

if (!nodes.contains(column)) {
// an = add node
graphStringNodes += "an " + column + " \n";

nodes.add(column);
}
} else if (columnIndex == 2) {
destinationAux = new Airport(column);

if (!nodes.contains(column)) {
// an = add node
graphStringNodes += "an " + column + " \n";

nodes.add(column);
}
} else if (columnIndex == 3) {
double parsedPreco = Double.parseDouble(column);
priceAux = BigDecimal.valueOf(parsedPreco);

/**
* Normalizing values.
*/
if (priceAux.intValue() > biggestPrice.intValue()) {
biggestPrice = priceAux;
} else {
priceAux = priceAux.divide(biggestPrice, 2, RoundingMode.HALF_UP);
}

edges.add(originAux.getName() + "," + destinationAux.getName()+ "," + priceAux.intValue());

stopovers.add(new Stopover(originAux, destinationAux, priceAux));

// ae = add edge
graphStringEdges += "ae " + originAux.getName() + "_" + destinationAux.getName() + " "
+ originAux.getName() + " > " + destinationAux.getName()
+ " price:" + priceAux.intValue()
+ " \n";
}

columnIndex++;
}

lineIndex++;
}

graphString = graphStringHeader + graphStringNodes + graphStringEdges;

这是抛出的异常:

java.lang.NullPointerException: null
at org.graphstream.graph.Path.add(Path.java:230)
at org.graphstream.algorithm.APSP$APSPInfo.getShortestPathTo(APSP.java:594)
at service.RouteFinderService.findRoute(RouteFinderService.java:183)

服务的第 230 行是:Path ShortestPath = edge.getShortestPathTo(destination.getName())。参数为目的地机场代码。

这就是我实例化 GraphAPSP 对象的方式:

Graph graph = new DefaultGraph("BestRouteGraph");
ByteArrayInputStream bs = new ByteArrayInputStream(graphString.getBytes());

FileSourceDGS source = new FileSourceDGS();
source.addSink(graph);

source.readAll(bs);

APSP apsp = new APSP();
apsp.init(graph);
apsp.setDirected(false);
apsp.setWeightAttributeName("price");

apsp.compute();

最佳答案

at org.graphstream.graph.Path.add(Path.java:230)

指的是APSPInfo类中getOpposite方法的使用

nodePath.push(edge.getOpposite(from));

确保检查是否存在到该节点的路径:

for(Node n : graph.getNodeSet()) {          
for(Node n2 : graph.getNodeSet()) {
if (n != n2) {
System.out.println("Shortest Path between "+n+" and "+n2+" :");

try {
APSPInfo nodeInfo = n.getAttribute("APSPInfo");
System.out.println(nodeInfo.getShortestPathTo(n2.getId()));
} catch (Exception e) {
System.out.println("no path");
}
}
}
}

例如,在您的数据集中,没有到 ATL 的路径,如图所示。

Graph

这是您应该得到的结果:

Shortest Path between PEK and LAX :
[PEK, LAX]
Shortest Path between PEK and ATL :
no path
Shortest Path between PEK and HND :
[PEK, LAX, DXB, HND]
Shortest Path between PEK and DXB :
[PEK, LAX, DXB]
Shortest Path between LAX and PEK :
no path
Shortest Path between LAX and ATL :
no path
Shortest Path between LAX and HND :
[LAX, DXB, HND]
Shortest Path between LAX and DXB :
[LAX, DXB]
Shortest Path between ATL and PEK :
[ATL, PEK]
Shortest Path between ATL and LAX :
[ATL, PEK, LAX]
Shortest Path between ATL and HND :
[ATL, PEK, LAX, DXB, HND]
Shortest Path between ATL and DXB :
[ATL, PEK, LAX, DXB]
Shortest Path between HND and PEK :
no path
Shortest Path between HND and LAX :
no path
Shortest Path between HND and ATL :
no path
Shortest Path between HND and DXB :
no path
Shortest Path between DXB and PEK :
no path
Shortest Path between DXB and LAX :
no path
Shortest Path between DXB and ATL :
no path
Shortest Path between DXB and HND :
[DXB, HND]

关于java - org.graphstream.algorithm.APSP$APSPInfo.getShortestPathTo 处的 NullPointerException - 图形问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60963398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com