2013-11-25 6 views
10

だから私はこのような二部グラフのエッジの入力に取る必要があります。Javaでリンクリストの配列を作成するにはどうすればよいですか?

6 
1 3 
1 2 
1 5 
2 7 
2 4 
2 9 

最初の数は辺の数です。その後、エッジがリストされます。例えば、頂点1に複数の異なる辺があり、1が何に接続されているかを把握したいのですが、グラフの各頂点には接続されている頂点のリストがあります。リンクされたリストの配列を作成するが、私はそれをどうすればよいか分からない。試しました

LinkedList<Integer>[] vertex = new LinkedList[5]; 
int i = 0, m = 6; 
while(i!=m){ 
    int temp = sc.nextInt(); 
    int temp2 = sc.nextInt(); 
    vertex[temp].add(temp2); 
    i++; 
} 

しかし、私はaddラインでnullpointerexceptionを取得します。

+4

要素は配列内で初期化されておらず、配列自体は初期化されていません。 –

+0

'Vertex'、' Edge'のようなクラスを作成すると思いましたか? 'List 'を 'Graph'と呼ばれる別のクラスに持っていますか? –

+0

また、配列は0ベースのインデックスを使用します。つまり、サイズが5の配列はインデックスが0〜4です。 –

答えて

17
LinkedList<Integer>[] vertex = new LinkedList[5]; 
int i = 0, m = 6; 
while(i!=m){ 
    int temp = sc.nextInt(); 
    int temp2 = sc.nextInt(); 

    // Make sure the list is initialized before adding to it 
    if (vertex[temp] == null) { 
    vertex[temp] = new LinkedList<Integer>(); 
    } 

    vertex[temp].add(temp2); 
    i++; 
} 
+0

LinkedList [] vertex =新しいLinkedList [5]; 上記の操作を行うと、次の警告が表示されるのはなぜですか?これを軽減する方法は? タイプ安全性:型のLinkedListの発現[]ニーズLinkedListのに合致する未チェックの変換[] – jaamit

+0

@jaamit @SuppressWarnings( "未チェック") LinkedListの []頂点=新しいLinkedListの[5]。私のために働いた。 –

+1

@ShubhamMittal @SuppressWarnings( "unchecked")これにより警告が抑制されます。私はなぜ警告が最初に来たのかを知ることにもっと興味があります。 – jaamit

2
//initialize array 
LinkedList<Integer>[] vertex = new LinkedList[5]; 
//initialize array elements(objects of LinkedList) 
for (int j=0; j<5; j++) 
    vertex[i]=new LinkedList<Integer>(); 

int i = 0, m = 6; 
while(i!=m){ 
    int temp = sc.nextInt(); 
    int temp2 = sc.nextInt(); 
    vertex[temp].add(temp2); 
    i++; 
} 

通常配列は、Javaで奨励されていません。代わりに、次のように使用することもできます。

//initialize array 
List<LinkedList<Integer>> vertex = new ArrayList<LinkedList<Integer>>(); 
//initialize arraylist elements(objects of LinkedList) 
for (int j=0; j<5; j++) 
    vertex.add(new LinkedList<Integer>()); 
関連する問題