如何使getWeight()返回此边的权重


    import java.util.*;

class Graph{
  class Edge{
    int v,w;
    public Edge(int v,int w){
        this.v=v; this.w=w;
    }
    @Override
    public String toString(){
        return "("+v+","+w+")";
    }
}
List<Edge> G[];
public Graph(int n){
    G=new LinkedList[n];
    for(int i=0;i<G.length;i++)
        G[i]=new LinkedList<Edge>();
}
boolean isConnected(int u,int v){
    for(Edge i: G[u])
        if(i.v==v) return true;
    return false;
}
void addEdge(int u,int v,int w)
{
    G[u].add(0,new Edge(v,w));
    G[v].add(0,new Edge(u,w));
}
public int getWeight(int u, int v)
{
    int w;
    return w;
}

这部分就在^^^^上面。我正在尝试使代码返回与已经输入的两个数字关联的正确数字。例如,g.getWeight(6,3( 应该返回 13,因为这是图中这两个数字的权重。

@Override
public String toString(){
    String result="";
    for(int i=0;i<G.length;i++)
        result+=i+"=>"+G[i]+"n";
    return result;
}
}
public class GraphEx
{
  public static void main(String[] args) 
  {
    Graph g=new Graph(10);
    g.addEdge(1,2,38);
    g.addEdge(1,5 ,19);
    g.addEdge(1,3 ,35);
    g.addEdge(1,4 ,11);
    g.addEdge(4,3,27);
    g.addEdge(3,6,13);
    g.addEdge(3,5,28);
    g.addEdge(5,6,26);

    System.out.println(g);
    g.getWeight(6,3);
}
}

当前代码给出的错误是"变量 w 可能尚未初始化">

变量 W 可能尚未初始化

这是因为确定分配。

每个局部变量 (§14.4( 和每个空白的最终字段 (§4.12.4, §8.3.1.2( 在访问其值时必须具有明确分配的值。

与成员变量不同,必须先赋值局部变量,然后才能使用其值。您可以简单地分配一个值;但这还不能满足您的需求:

int w = 0;  // Or -1, or Integer.MAX_VALUE, or something.

要实现这种方法,你必须搜索G[u]的边缘,寻找目标为v的边,并返回其权重。

例如:

for (Edge e : G[u]) {
  if (e.v == v) { return e.w }
}
throw new NoSuchElementException(); // Or return a default value.

请注意,混合数组和泛型不是一个好主意:

List<Edge> G[];

最好使用完整的泛型解决方案:

Map<Integer, List<Edge>> G = new HashMap<>();

代码中的

public int getWeight(int u, int v)
{
    int w; // There's no need, delete this
    return w;
}

您正在创建一个新变量,但未对其进行初始化。你必须在右边缘的G[]中搜索。

最新更新