gpt4 book ai didi

java - 让加权图在 JGraphT 中工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:20 25 4
gpt4 key购买 nike

为什么我会收到此程序的 NULL 指针错误,据我所知,一切看起来都很好,我刚刚开始使用 JGraphT 并需要一些帮助。

上下文:我需要能够将航类添加到图表中,每个航类都是双向的,并且航类应该按其价格加权。

错误:

run:
Please enter the number of flights:
2
Please enter the flight destination for flight 1:
Edinburg
Please enter the flight destination for flight 2:
Heathrow
Enter the edges
Edinburg
Heathrow
Please enter a price for this edge:
25.99
Exception in thread "main" java.lang.NullPointerException
at org.jgrapht.graph.AbstractBaseGraph.setEdgeWeight(Unknown Source)
at graphapp.MyGraph.setEdgeWeight(MyGraph.java:25)
at graphapp.GraphApp.main(GraphApp.java:33)
Java Result: 1
BUILD SUCCESSFUL (total time: 14 seconds)

MyGraph.java(类):

package graphapp;

import org.jgrapht.*;
import org.jgrapht.graph.*;
import org.jgrapht.alg.KruskalMinimumSpanningTree;

public class MyGraph {

private final SimpleDirectedWeightedGraph<String, DefaultWeightedEdge> g = new SimpleDirectedWeightedGraph<String, DefaultWeightedEdge>(DefaultWeightedEdge.class);
static final double DEFAULT_EDGE_WEIGHT=19;
//DefaultWeightedEdge > (DefaultWeightedEdge.class);
private DefaultWeightedEdge e1;

public void addVertex(String name) {
g.addVertex(name);
//graph.addVertex(name);
}

public void addEdge(String v1, String v2) {
g.addEdge(v1, v2);
e1 = g.addEdge(v1, v2);
}

public void setEdgeWeight(String EDGE_WEIGHT) {
g.setEdgeWeight(e1, Double.valueOf(EDGE_WEIGHT));
}

public SimpleDirectedWeightedGraph<String, DefaultWeightedEdge> getGraph() {
return g;
}

/*public SimpleWeightedGraph<String,DefaultWeightedEdge> getGraph() {
return graph;
}*/

public void getSpanningTree() {
KruskalMinimumSpanningTree k = new KruskalMinimumSpanningTree(g);
System.out.println(k.getEdgeSet().toString());
//KruskalMinimumSpanningTree k1=new KruskalMinimumSpanningTree(graph);
//System.out.println(k1.getEdgeSet().toString());
}

public void getSpanningTreeCost() {
KruskalMinimumSpanningTree k = new KruskalMinimumSpanningTree(g);
System.out.println(k.getSpanningTreeCost());
}
}

GraphApp(主要):

package graphapp;
import org.jgrapht.demo.*;
import java.util.Scanner;
import graphapp.*;
public class GraphApp{

public static void main(String args[]) {

int x;
Scanner sc = new Scanner(System.in);
MyGraph my = new MyGraph();
System.out.println("Please enter the number of flights: ");
int no_of_ver = sc.nextInt();

for(int i=1;i <= no_of_ver;i++) {
System.out.println("Please enter the flight destination for flight "+i+ ":");
my.addVertex(sc.next());
}

do {
System.out.println("Enter the edges");
String e1 = sc.next();
String e2 = sc.next();
my.addEdge(e1, e2);

System.out.println("Please enter a price for this edge:");
my.setEdgeWeight(sc.next());
System.out.println("Continue... Yes:1 ********** No:0");
x=sc.nextInt();
} while(x==1);

System.out.println("Graph\n" + my.getGraph().toString());
System.out.println("\n\n**********Spanning Tree*********");
my.getSpanningTree();
System.out.println("\nSpanning Tree Cost");
my.getSpanningTreeCost();
}
}

最佳答案

我的错误是这个方法:

public void addEdge(String v1, String v2) {
g.addEdge(v1, v2);
e1 =g.addEdge(v1, v2);
System.out.println("Edge added: " + e1.toString());
}

我需要将其更改为:

public void addEdge(String v1, String v2) {
e1 =g.addEdge(v1, v2);
System.out.println("Edge added: " + e1.toString());
}

关于java - 让加权图在 JGraphT 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242961/

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