2014-11-02 2 views
-2

오류 행은 69,33,51입니다. 오류는 배열 색인이 범위를 벗어났습니다DFS의 ArrayIndexOutOfBoundsException

다음은 깊이 우선 검색 알고리즘의 Java 코드입니다. 이 바운드 예외 밖으로 배열 인덱스를 보여줍니다 69,33,51에서

..

public class dfs1 { 

    Stack<Integer> st; 
    int vFirst; 
    int[][] matrix; 
    int[] isVisited = new int[3]; 
    public static void main(String args[]) 
    { 
     Scanner input=new Scanner(System.in); 
     System.out.println("enter the no of vertices"); 
     int size=input.nextInt(); 
     int[][] matrix=new int[size][size]; 
     System.out.println("enter the values for matrix"); 

     for(int row=0;row<size;row++) 
     { 
      for(int col=0;col<size;col++){ 
       matrix[row][col]=input.nextInt(); 
      } 
     } 
     System.out.println("the adjacency matrix is "); 
     for(int row=0;row<size;row++) 
     { 
      for(int col=0;col<size;col++){ 
       System.out.println(matrix[row][col]); 
      } 
     } 
     System.out.println("enter the start vertex "); 
     int start=input.nextInt(); 
     new dfs1(matrix,size,start); 



    } 


    public dfs1(int[][] matrix,int size,int start) 
    { 
     this.matrix = matrix; 
     st = new Stack<Integer>(); 

     int[] node=new int[size]; 
     for(int i=0;i<size;i++) 
     { 
      node[i]=i; 
     } 
     int firstNode = start; 
     depthFirst(firstNode,size); 
    } 
    public void depthFirst(int vFirst,int n) 
    { 
    int v,i; 

    st.push(vFirst); 

    while(!st.isEmpty()) 
    { 
     v = st.pop(); 
     if(isVisited[v]==0) 
     { 
      System.out.print("\n"+(v+1)); 
      isVisited[v]=1; 
     } 
     for (i=0;i<n;i++) 
     { 
      if((matrix[v][i] == 1) && (isVisited[i] == 0)) 
      { 
       st.push(v); 
       isVisited[i]=1; 
       System.out.print(" " + (i+1)); 
       v = i; 
      } 
     } 
    } 
    } 
} 
+1

이 줄 번호는 우리에게 도움이되지 않습니다. 이 문제의 원인이되는 특정 코드 행을 말씀해 주시겠습니까? – furkle

+0

매트릭스가 어떤 크기인지 알 수 있고, 시작점에 입력 할 숫자는 무엇입니까? 또한 디버거를 사용하여이 단계를 진행하는 것이 좋습니다. 그렇게 한 경우 매우 빨리 문제를 찾을 수있을 것입니다. 마지막으로, 문제가 발생한 줄을 알려줄 필요가 있습니다. 목록에 줄 번호가 없으므로 번호가 전혀 도움이되지 않습니다. –

답변

1

당신은

int[] isVisited = new int[3]; 

하지만 실제로는이 배열이어야 AT LEAST size