Escolar Documentos
Profissional Documentos
Cultura Documentos
Agosto 2016
Tema # 2 Grafos.
0 1 2 3 4
0 0 1 0 0 1
1 1 0 0 1 1 1 si i adj j
G= 2 0 0 0 1 1 Gi,j =
3 0 1 1 0 1 0 si i não adj j
4 1 1 1 1 0
public interface IGrafo <T> {
public boolean EVazio();
public IGrafo<T> CopiarEm();
public int NumeroDeVertices();
public int NumeroDeArcos();
public boolean EstaOVertice(T v);
public boolean EstaOArco(T v1, T v2);
public void InserirVertice(T v) throws Exception;
public void InserirArco(T v1, T v2) throws Exception;
public void EliminarVertice(T v) throws Exception;
public void EliminarArco(T v1, T v2) throws Exception;
public ILista<T> AdjacentesA(T v) throws Exception;
public void Sustituir(T VerticeVelho, T VerticeNovo) throws Exception;
public ILista<T> PercorridoEmProfundidade();
public ILista<T> PercorridoNaLargura();
}
public class GrafoNaoDirLVMA<T> implements IGrafo<T>{
private ListaSE<T> ListaVertices;
private int[][] MatrizAdj;
public GrafoNaoDirLVMA() {
ListaVertices=new ListaSE<>();
MatrizAdj=new int[100][100];
}
}
public ListaSE<T> AdjacentesA(T v) throws Exception {
if(EstaOVertice(v)){
ListaSE<T> resultado=new ListaSE<>();
for (int i = 0; i < ListaVertices.Extensao(); i++) {
if (EstaOArco(v, ListaVertices.Obter(i))) {
resultado.Adicionar(ListaVertices.Obter(i));
}
}
return resultado;
}
else
throw new Exception("O vértice v nao existe");
}
public void Sustituir(T VerticeVelho, T VerticeNovo)throws Exception {
if (EstaOVertice(VerticeVelho)&&!EstaOVertice(VerticeNovo)) {
int pos=ListaVertices.Procurar(VerticeVelho);
ListaVertices.Extrair(pos);
ListaVertices.Introduzir(VerticeNovo,pos);
}
else
throw new Exception("O vértice velho nao existe ou ja o grafo
tem un vértice igual a vértice novo");
}
public ListaSE<T> PercorridoEmProfundidade() {
ListaSE<T> visitados=new ListaSE<>();
return visitados;
}
private void BPP(T v, ListaSE<T> visitados)
{
if (visitados.Procurar(v)==-1) {
visitados.Adicionar(v);
for (int i = 0; i < AdjacentesA(v).Extensao(); i++) {
if (visitados.Procurar(AdjacentesA(v).Obter(i))==-1) {
BPP(AdjacentesA(v).Obter(i), visitados);
}
}
}
}
public ListaSE<T> PercorridoNaLargura() {
ListaSE<T> visitados=new ListaSE<>();
return visitados;
}
private void BPL(T v, ListaSE<T> visitados)
{
Fila<T> fila=new Fila<>();
visitados.Adicionar(v);
fila.Adicionar(v);
while(!fila.EVazia())
{
T u=fila.Extrair();
for (int i = 0; i < AdjacentesA(u).Extensao(); i++) {
if (visitados.Procurar(AdjacentesA(u).Obter(i))==-1) {
visitados.Adicionar(AdjacentesA(u).Obter(i));
fila.Adicionar(AdjacentesA(u).Obter(i));
}
}
}
}
}