import java.io.*;
import javax.swing.*;
class OrdemTop {
public void ler() throws IOException {
int aux=0, tempo=0, controle=0;;
InputStream is = getClass().getResourceAsStream ("teste\teste.txt");
BufferedReader br = new BufferedReader (new InputStreamReader (is));
String linha="";;
linha = br.readLine();
aux=Integer.parseInt(linha);
char matriz[][] = new char[aux][aux];
int fecha[] = new int[aux];
int anterior[] = new int[aux];
boolean visitado[] = new boolean[aux];
for(int i=0; i<aux; i++){//descobre a matriz
linha += br.readLine();
}
for(int i=0; i<aux; i++){//inicializa a matriz
for(int j=0; j<aux; j++){
matriz[i][j] = linha.charAt(i+j);
}
}
for(int i=0; i<aux; i++){//inicializa anterior com zero e visitado(marca todos os vertices) como naum visitado
anterior[i]=0;
visitado[i]=false;
}
visita(matriz, visitado, fecha, controle, aux, tempo, anterior);
ordenaTop(fecha, aux);
br.close(); // br.close já fecha "is" automaticamente
}
public void ordenaTop(int fecha[], int aux){
String ordena=Float.toString(fecha[0]);
int menor=fecha[0];
for(int i=1; i<aux; i++){
if(fecha[i]<menor){
menor = fecha[i];
ordena = Float.toString(fecha[i]) + ordena;
}else{
ordena += Float.toString(fecha[i]);
}
}
System.out.println(ordena);
}
public void visita(char matriz[][], boolean visitado[], int fecha[], int controle, int aux, int tempo, int anterior[]){
tempo++;//adiciona mais um ao tempo...
for(int j=0; j<aux; j++){
visitado[controle] = true;//marca o vetor como visitado...
if( (matriz[controle][j]=='1') && (visitado[controle]==false) ){
anterior[j]=controle;//pra gravar qual é o vertice do anterior do proximo
controle = j;//acha o proximo vertice
visita( matriz, visitado, fecha, controle, aux, tempo, anterior );
}
if( j==(aux-1) ) {
fecha[controle]=tempo;//acha o tempo em que se volta a partir do vertice
visita( matriz, visitado, fecha, anterior[controle], aux, tempo, anterior );
}
}
for(int i=0; i<aux; i++){//verifica se tem algum vertice não visitado...
if(visitado[i]==false){
visita( matriz, visitado, fecha, i, aux, tempo, anterior );
}
}
}
public static void main(String[] args) throws IOException {
OrdemTop tf = new OrdemTop();
tf.ler();
System.exit(0);
}
}
StackOverflowError....=(
F
bom, o meu codigo ta dando esse erro ai, compila direito mas na hora de rodar da isso... como q eu concerto isso?? esse codigo eh de ordenação topologica.
[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - Ratinho[/color][/size] :joia:
1 Resposta
J
isso acontece quando nao ha fim numa chamada recursiva, ou seja, voce vai empilhando as variaveis na memoria ate que a pilha estoura!
provavelmente voce precisa garantir mais alguma coisa nesse seu metodo visita() para que ele nao fique sendo chamado recursivamente ate estourar sua pilha.
espero ter ajudado
Criado 9 de julho de 2006
Ultima resposta 10 de jul. de 2006
Respostas 1
Participantes 2
Alura Git Flow: entenda o que é, como e quando utilizar Entenda o que é Git Flow, como funciona seu fluxo com branches como Master, Develop, Feature, Release e Hotfix, além de vantagens e desvantagens.
Casa do Codigo Ontologias e Web Semantica: Do conceito a aplicacao Por Ivam Galvao Filho — Casa do Codigo