gpt4 book ai didi

java - HashMap实现邻接表

转载 作者:行者123 更新时间:2023-12-02 03:25:47 26 4
gpt4 key购买 nike

class Graph {
//Map of adjacency lists for each node

Map<int[], LinkedList<int[]>> adj;

public Graph(ArrayList<int[]> nodes) {
adj = new HashMap<int[], LinkedList<int[]>>();
for (int i = 0; i < nodes.size(); ++i) {
adj.put(nodes.get(i), new LinkedList<int[]>());
}
}

public void addNeighbor(int [] a, int [] b) {
adj.get(a).add(b);
}

public LinkedList<int[]> getNeighbors(int a[]) {
return adj.get(a);
}
}


public class Assignment2 {

public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int x= sc.nextInt();
int y= sc.nextInt();
int n= sc.nextInt();

ArrayList<int []> al= new ArrayList<>();
for(int i=0;i<n;i++){
int[] a = new int[2];
a[0]=sc.nextInt();
a[1]=sc.nextInt();
al.add(i, a);
}
int[] s={0,100};
int[] t={x-5,150};
Graph g = new Graph(al);
g.adj.put(s, new LinkedList<int[]>());
g.adj.put(t, new LinkedList<int[]>());
for(int i=0;i<al.size();i++){
int a[]=al.get(i);
for(int j=i;j<al.size();j++){
int b[]=al.get(j);
int r=100;
int value=(int) (Math.pow(a[0]-b[0],2)+Math.pow(a[1]-b[1],2));
if(0<=value && value <=200){
g.addNeighbor(a, b);
g.addNeighbor(b, a);
}
}
}
}

我必须实现一个邻接列表,用于我使用 HashMap 的图,因为您可以看到键值是一个数组,其中包含代表图中顶点的坐标值 (x,y)。

问题是当我想在图中添加一个新的邻居时,即在两个顶点之间添加一条边,我需要将该邻居添加到相应的键中,但该键是一个数组......所以我想知道如何做我访问 key 或添加到该 key 的邻居。我所做的是创建一个新数组,其值等于 HashMap 中存储的键数组,但这两个数组不相等。

请提出解决方案或任何其他存储坐标的方法

最佳答案

不要将您的 Point 存储在数组中。将坐标封装在您定义的 Point 中,并将其存储在 HashMap 中。 Point 具有代表您的点坐标的成员。不要忘记为您的 Point 实现 equalshashCode

关于java - HashMap实现邻接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923263/

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