Munim Mowsum Ответов: 1

Как решить проблему в моем коде DFS, написанном на java?


выход :

Enter Vertex no : 
4
How many edge you want to enter : 
3
Enter edge : 0 1
Enter edge : 0 2
Enter edge : 1 3
Final Visited Order : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
	at DFS.DFS_Visit(DFS.java:58)
	at DFS.traverse(DFS.java:53)
	at DFS.main(DFS.java:115)


Что я уже пробовал:

//Мой код --

import java.util.*;

public class DFS {
	static int ver;
	static int edg;
	static int time;
	static int u;
	static int source;
	static int destination;
	static final int white=0,grey=1,black=2;
	static int prev[]=new int[ver];
	static int color[]=new int[ver];
	static int d[]=new int[ver];
	static int f[]=new int[ver];
	int vertex[]=new int[ver];
	
	static LinkedList<integer>list[];
	   
	   
	   @SuppressWarnings({ "unchecked", "static-access" })
public DFS(int ver) {
	   this.ver = ver;
	   list = new LinkedList[ver];
	   for (int i = 0; i <ver; i++)="" {
="" list[i]="new" linkedlist<="">();
	      }
	}
	   
	public void addEdge(int source,int destination) {
		   list[source].addFirst(destination);
	}
		
	
	
	@SuppressWarnings("unused")
	public void traverse(){
		 int prev[]=new int[ver];
		 int color[]=new int[ver];
		 int d[]=new int[ver];
		 int f[]=new int[ver];
		 int time;
    		
		for(u=0;u<ver;u++) {
="" color[u]="white;
" prev[u]="-1;
" f[u]="Integer.MAX_VALUE;
" d[u]="Integer.MAX_VALUE;
" }
="" time="0;
" 
="" for(u="0;u<ver;u++)" if(color[u]="=white)
" dfs_visit(u);
="" public="" void="" dfs_visit(int="" u)="" iterator<integer="">ver=list[u].listIterator();
		while(ver.hasNext()) {
			   int v=ver.next();
			if(color[v]==white) {
				prev[v]=u;
				DFS_Visit(v);
			}
		}
		color[u]=black;
		time=time+1;
		f[u]=time;
		System.out.println(u+" ");
	}
	
	
	
	
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		
		System.out.println("Enter Vertex no : ");
		Scanner in1=new Scanner(System.in);
		ver=in1.nextInt();
		
		
		
		System.out.println("How many edge you want to enter : ");
		Scanner number=new Scanner(System.in);
		edg=number.nextInt();
		
		DFS graph=new DFS(ver);
		
		for(int e=0;e

Richard MacCutchan

Не объявляйте поля в вашем классе как static, вы получите совершенно неправильные ответы, если создадите несколько объектов DFS.

1 Ответов

Рейтинг:
2

Luc Pattyn

Привет,

1.
возможно, вы заметили, что не весь ваш код отображается, он остановился на каком-то знаке <, остальное было отброшено как неожиданный HTML-код, потому что вы не заключили все в предварительные теги (именно для этого предназначен виджет кода или диалог "вставить как блок кода").

2.
Ключ обычно находится в сообщении об ошибке, которое вы получаете: "индекс 0 выходит за пределы длины 0"; на самом деле вам не нужен массив нулевой длины, не так ли?
Я вижу

static int ver;
...
static int prev[]=new int[ver];


Теперь статический код, такой как инициализация prev [], выполняется сразу же, когда на класс ссылаются в первый раз, и ver в это время все еще равен нулю. Вам придется немного все перестроить...

:)