-2
我上Hackerrank解決一個問題,你可以閱讀導通https://www.hackerrank.com/challenges/journey-to-the-moon爲什麼這段代碼不適用於hackerrank?
輸出是不正確的使用下面的代碼
我已經實現在所有代碼所需的數據結構,並試圖創建的尺寸陣列連接的組件。
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);
}
}
}
}
}
要求我們回顧的代碼很多,要理解它如何在沒有任何解釋的情況下工作並不容易。我不認爲我會想要這樣做。 –