gpt4 book ai didi

java - 使用 hashmap 表示加权图

转载 作者:行者123 更新时间:2023-11-30 08:16:38 25 4
gpt4 key购买 nike

我的输入文本文件:

  122334 
45
67

输出应该是:

0-{1=2,2=3,3=4} //node 0 is connected to 1 with weight 2,to 2 with weight 3,etc

1-{4=5}

2-{6=7}

下面是我的程序:

public class BFS {

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

HashMap<Integer, HashMap<Integer, Integer>>hash1=new HashMap<Integer, HashMap<Integer,Integer>>();
HashMap<Integer, Integer>hash2=new HashMap<Integer, Integer>();
HashMap<Integer, Integer>temp1=new HashMap<Integer, Integer>();
BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\Translab\\workspace\\Algorithms\\inputfile.txt"));
int remainder,remainder2,j=0;
int line=1;
String str;
while ((str =in.readLine()) != null) {
int foo = Integer.parseInt(str);
while(foo>0){
remainder=foo % 10;
foo = foo / 10;
remainder2=foo%10;
foo=foo/10;
temp1.put(remainder2, remainder);
hash2.putAll(temp1);

}
temp1.clear();
hash1.put(j, hash2);

j++;


}
for (Entry<Integer, HashMap<Integer, Integer>> entry : hash1.entrySet()) {
System.out.println(entry.getKey()+"-"+entry.getValue() );

}
in.close();
}
}

有了这个我得到:

0-{1=2, 2=3, 3=4, 4=5, 6=7}

1-{1=2, 2=3, 3=4, 4=5, 6=7}

2-{1=2, 2=3, 3=4, 4=5, 6=7}

有人可以帮助我吗?我是 hashmap 的新手。

最佳答案

您不必要地重载了 Map 和 Integer 类。更好的方法是将图形节点和边封装在类中——一旦您开始必须对图形执行操作,这将使事情变得容易得多:

class Node {
private int id;
private List<Edge> edges;
public boolean hasId(int id) {
return id == this.id;
}
public addEdge(Node node, int weight) {
edges.add(new Edge(node, weight));
}
}

class Edge {
private int weight;
private Node destination;
}

class Graph {
private List<Node> nodes;
public Node getNodeById(int id) {
return nodes.stream()
.filter(node -> node.hasId(id))
.findFirst().orElse(null);
}
}

我还建议您在转换为 id 和权重之前将输入行分解为标记。这可以在 Graph 类中完成:

public void addEdge(int fromNodeID, String edgeData) {
Node node = getNodeByID(fromNodeID);
for (int pos = 0; pos < edgeData.length(); pos += 2) {
int destNodeID = Integer.parseInt(edgeData.substring(pos, pos+1));
int weight = Integer.parseInt(edgeData.substring(pos + 1, pos + 2);
node.addEdge(getNodeByID(destNodeID), weight);
}
}

那么处理输入就相当简单了:

int id = 0;
Map<Integer, String> edgeData = new HashMap<>();
while((line = in.readLine()) != null) {
graph.addNode(new Node(id));
put(id, line);
}
edgeData.entrySet().stream()
.forEach(entry -> graph.addEdge(entry.getKey(), entry.getValue());

我省略了很多错误检查、简单的构造函数等,但希望您能理解。

关于java - 使用 hashmap 表示加权图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28204290/

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