2016-08-12 16 views
0
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); 
      } 
     } 
    } 
} 

キー値が座標値(x、y)を含む配列であることがわかるように、HashMapを使用したグラフに使用する隣接リストを実装する必要があります。グラフの頂点を表します。隣接リストを実装するHashMap

問題は、新しいネイバーをグラフに追加したい、つまり2つの頂点の間にエッジを追加する場合です。そのネイバーをそれぞれのキーに追加する必要がありますが、そのキーは配列なので...私はそのキーにアクセスするか、そのキーで隣人に追加しますか?私が行ったのは、ハッシュマップに格納されているキー配列に等しい値を持つ新しい配列を作成したものですが、これらの2つは等しくありません。

は、溶液または arrayであなたのポイントを保管しないでください座標

答えて

2

を格納するための他の方法を提案してください。定義したPointの座標をカプセル化し、HashMapに保存します。 Pointにはあなたのポイントの座標のメンバーがいます。あなたのPointのためにequalshashCodeを実装することを忘れないでください。

+0

お寄せいただきありがとうございます... –

関連する問題