-2
私はHackerrank上の問題を解決しています

、あなたはそれを読むことができます接続されたコンポーネント。なぜこのコードはハッカーでは動かないのですか?出力は、私がそのコード内のすべての必要なデータ構造を実装してのサイズの配列を作成しようとしました</p> <p>次のコードを使用して修正されていない</p> <p><a href="https://www.hackerrank.com/challenges/journey-to-the-moon" rel="nofollow noreferrer">https://www.hackerrank.com/challenges/journey-to-the-moon</a>オン

import java.io.*; 
import java.util.*; 



public class Solution { 
public static void main(String[] args) throws Exception{ 

    BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));  
    String[] temp = bfr.readLine().split(" "); 
    int N = Integer.parseInt(temp[0]); 
    int I = Integer.parseInt(temp[1]); 
    Solution sol=new Solution(); 
    Graph g = sol.new Graph(N); 


    for(int i = 0; i < I; i++){ 
     temp = bfr.readLine().split(" "); 
     int a = Integer.parseInt(temp[0]); 
     int b = Integer.parseInt(temp[1]); 
     g.addEdge(a,b); 
     // Store a and b in an appropriate data structure of your choice 
    } 
    CC ccg=sol.new CC(g); 
    int len=ccg.getComp(); 

    long combinations = 0; 
    for(int k=0;k<len;k++){ 
     if(k==0){ 
      combinations+=ccg.getNum(k); 
     }else{ 
      combinations*=ccg.getNum(k); 
     } 
    } 
    // Compute the final answer - the number of combinations 

    System.out.println(combinations); 
    } 

    class Graph{ 
     final int s; 
     Bag[] adj; 
     public Graph(int si){ 
      s=si; 
      adj=new Bag[s]; 
      for(int i=0;i<si;i++){ 
       adj[i]=new Bag(); 
      } 
     } 
     public void addEdge(int i,int j){ 
      adj[i].add(j); 
      adj[j].add(i); 
     } 

     public int graphSize(){ 
      return s; 
     } 

     public Iterable<Integer> adj(int v){ 
      return adj[v]; 
     } 
    } 
    class Bag implements Iterable<Integer>{ 

    Node first; 
     int size=0; 
     final class Node{ 
      int i; 
      Node next; 
     } 
     public void add(int x){ 
      Node old=first; 
      first=new Node(); 
      first.i=x; 
      first.next=old; 
      size++; 
     } 
     public int getSize(){ 
      return size; 
     } 
     public Iterator<Integer> iterator() { 
      // TODO Auto-generated method stub 
      return new ListIterator(); 
     } 

     public class ListIterator implements Iterator<Integer>{ 
      private Node current=first; 
      public boolean hasNext(){ 
       return current!=null; 
      } 
      public void remove(){} 
      public Integer next(){ 
       int i=current.i; 
       current=current.next; 
       return i; 
      } 
     } 

    } 

    class CC{ 
     private boolean[] marked; 
     private int[] id; 
     private int[] comp; 
     private int count=0; 

     public CC(Graph g){ 
      int i=g.graphSize(); 
      marked=new boolean[i]; 
      id=new int[i]; 
      comp=new int[i]; 
      for(int j=0;j<i;j++){ 
       comp[j]=0; 
      } 

      for(int v=0;v<i;v++){ 
       if(!marked[v]){ 
        dfs(g,v); 
        count++; 
       } 
       comp[count]=comp[count]+1; 
      } 

     } 
     public int getComp(){ 
      return count; 
     } 
     public int getNum(int i){ 
      return comp[i]; 
     } 
     private void dfs(Graph g,int v){ 
      marked[v]=true; 
      id[v]=count; 
      for(int w:g.adj[v]){ 
       if(!marked[w]){ 
        dfs(g,w); 
       } 
      } 
     } 
    } 




    } 
+1

レビューをお願いするのはたくさんのコードですが、何の説明もせずにどのように動作するのかを理解することは容易ではありません。私は努力したいとは思わない。 –

答えて

3

私はプログラムのいくつかのテストを行った。

すべての実行で、プログラムは0を出力しました。場合によっては0が正しい出力ですが、すべてのケースで正しい出力ではありませんでした。これは、Hackerrankがあなたのプログラムをダウンさせる理由の一つになります。例入力:

3 1 
0 2 

私は宇宙飛行士0と2は、他の国からの一の国との宇宙飛行士1から来るとの2つの国を記述するために、これを意味しました。 期待される出力:2。あなたのプログラムからの実際の出力:0

(私はこの段落を編集しました)すべてのペアにAがと等しい場合、ArrayIndexOutOfBoundsExceptionが表示されます。たとえば:

1 1 
0 0 

私はA == Bを禁止Hackerrankルールで何を見ていないので、私はあなたがこれを考慮すべきであると仮定します。

私がコメントで言ったように、私はあなたのプログラムを掘り下げて、なぜ私が記述したように振る舞ったのか理解していません。私は観察して報告しているだけです。私はあなた自身にデバッグを残します。

関連する問題

 関連する問題