Problem in classifying the edges of graphs

1

I'm doing an algorithm to sort the edges of a graph, between Type T, B, C, and F. It's giving me a wrong output, it ends vertex 3 at the same time as the 4 starts, so it does not classifying the Edge that has from 4 to 3.

Main.java

package Grafos;

public class Main {

    public static void main(String[] args) {
        Grafo novo = new Grafo(8);
        novo.Adiciona_aresta(0,7);
        novo.Adiciona_aresta(1,0);
        novo.Adiciona_aresta(1,6);
        novo.Adiciona_aresta(7,1);
        novo.Adiciona_aresta(6,7);
        novo.Adiciona_aresta(2,1);
        novo.Adiciona_aresta(2,6);
        novo.Adiciona_aresta(5,6);
        novo.Adiciona_aresta(5,2);
        novo.Adiciona_aresta(3,5);
        novo.Adiciona_aresta(3,4);
        novo.Adiciona_aresta(4,5);
        novo.Adiciona_aresta(4,3);
        //novo.DFS_ini(0);
        //novo.Pilha_DFS(0);
        novo.Classificar_Arestas(2);
    }

}

Grafo.java

package Grafos;
import java.io.*;
import java.net.SocketTimeoutException;
import java.util.*;
public class Grafo {
    LinkedList<Integer> Arestas [];
    private int n;


    public Grafo(int n){
        this.n = n;
        Arestas = new LinkedList[n];
        for (int i=0; i<n; ++i)
            Arestas[i] = new LinkedList();
    }
    public void Adiciona_aresta(int origem, int destino){
        Arestas[origem].add(destino);

    }

    public int DFS(int S, boolean visited[], int contador){
        visited[S] = true;
        int m;
        ListIterator<Integer> v = Arestas[S].listIterator();
        while(v.hasNext()) {
            m = v.next();
            System.out.println(S + ">>" + m);
            if(!visited[m]){
                contador = DFS(m,visited,contador+1);
            }
        }
        return contador+1;

    }

    public void DFS_ini(int S){
        boolean Visitados[] = new boolean [n];
        int contador = 1;
        int b = DFS(S,Visitados,contador);
        System.out.println(b);
        System.out.println("____________________________________________________");
    }

    public int Verificar_Arestas(int S, boolean visited[], int contador, int d[], int f[]){ //classificar arestas
        visited[S] = true;
        d[S] = contador;
        int m;
        ListIterator<Integer> v = Arestas[S].listIterator();
        while(v.hasNext()){
            m = v.next();
            if(!visited[m]){
                System.out.println(S + " >> " + m);
                System.out.println("Tipo T");
                contador = Verificar_Arestas(m,visited,contador+1,d,f);

            }else{
                System.out.println(S + " >> " + m);
                if((d[S] > d[m] && f[m] == 0)||(d[S] > d[m] && d[S] < f[m])){

                    System.out.println("Tipo B");
                }
                else if(d[S] > f[m]){
                    System.out.println("Tipo C");
                }else if(d[S] < d[m]) {
                    System.out.println("Tipo F");
                }
            }
            f[S] = contador + 1;
        }
        return contador+1;

    }

    public void Classificar_Arestas(int S){ // método que inicia
        int f [] = new int [n];
        int d [] = new int [n];
        boolean visited[] = new boolean [n];
        int contador = 1;

        int b = Verificar_Arestas(S,visited,contador,d,f);
        for(int i = 0; i < n; i++) { //for para verificar caso tenha outra parte do grafo
            if(!visited[i]){
                b = b + Verificar_Arestas(i,visited,b+1,d,f);
            }
        }

    }
    public void Pilha_DFS(int s) {
        boolean[] visitados = new boolean[10];
        visitados[s] = true;
        Pilha<Integer> pilha = new PilhaArrayList<>();
        pilha.push(s);
        while (!pilha.isEmpty()) {
            int topo = pilha.pop();
            for (int linha : Arestas[topo]){
                System.out.println(topo + ">>" + linha);
                    if (visitados[linha]) continue;
                    visitados[linha] = true;
                    pilha.push(linha);
            }
        }
        System.out.println("____________________________________________________");
    }

}
    
asked by anonymous 05.09.2018 / 15:36

0 answers