Criar um grafo

6 respostas
java
T

Boa noite a todos, preciso de um norte, pois estou meio perdido.

Tenho que criar um grafo onde através do numero de vertice e aresta, eu defina essas arestas e fico guardando numa lista. Por exemplo:

Grafo g = new Grafo(4,5); //4 vertices e 5 arestas
g.addAresta(0,1);  // origem, destino
g.addAresta(0,3);
g.addAresta(1,2);
g.addAresta(3,1);
g.addAresta(3,2);

g.montarGrafo() // nessa função eu montaria o grafo através dessas informações acima

g.mostrarGrafo() // eu mostraria a lista feita

Eu sei grafo e Lista na Teoria, mas quando é na hora de implementar eu fico perdido, entao gostaria de um help.
ps: se for pra responder com ignorâncias e insultos melhor nem responder.

6 Respostas

D

Faz muito tempo que não vejo grafos, mas qual a estrutura de dados é o grafo?

No construtor tem os parâmetros vértices e arestas, então imagino algo assim:

Vertice[] vértices;
Aresta[] arestas;

depois vc tem o addAresta, então deve ter pelo menos mais uma variável:

int qtdDeArestas = 0; // inicialmente zero

o método deve ser algo assim:

void addAresta(int a, int b) {
    aresta[qtdDeArestas] = new Aresta(vértices[a], vértices[b]);
    qtdDeArestas+=1;
}

aparentemente os vértices não podem ser nulos, então no construtor tem que ter algo assim:

for (int i = 0; i < vértices.length; i++) {
    vértices[i] = new Vertice(i);
}

depois disso, o montarGrafo seria:

if (qtdDeArestas != arestas.length) throw new ArestaException("Não foi possível montar o grafo, qtd de arestas diferente do informado");

talvez tenha mais coisa aí, não sei.

o mostrarGrafo é muito simples, é só imprimir o vetor de arestas.

Isso são só suposições, provavelmente tem outras formas de fazer isso e até de forma mais eficiente, também não sei se está certo.

T

é uma estrutura de adjacência, dai pretendo fazer uma lista de adjacência. Estou usando java e como é uma lista de adjacência, não ficaria melhor se fosse um arrayList ao invés de um vetor?

D

Sim, mas se usar lista, qual seria o motivo de passar a quantidade de vértices e arestas no construtor?

T

eu imaginaria que seria mais fácil, pois assim daria pra definir as arestas na função de acordo com a quantidade passada no construtor. Como foi colocado no exemplo que imaginei acima, foi pedido 4 vértices (0 a 3) e 5 arestas{(0,1),(0,3),(1,2),(3,1),(3,2)}.
Pelo menos assim que eu tava pensando, ou seria um erro?:thinking:

T

No caso, ao mostrar a lista do grafo ficaria assim:
0->1->3->|
1->2->|
2-|
3->1->2-|
Tem uma lista de vértices e cada vértice tem outra lista

D

Não, depende da estrutura e de como vc vai usar aquela informação. Acredito que existam infinitas formas corretas de fazer isso.

Criado 25 de março de 2018
Ultima resposta 27 de mar. de 2018
Respostas 6
Participantes 2