E aí galera blz. É a primeira vez que eu posto aqui.
Pessoal eu andei fazendo um exercício com um algorítmo em passeio de profundidade mas ele está acusando um problema aqui:
public void profundidade(int v)
{
int i;
for(i=0;i<numVertices;i++)
visitado[i]=0;
prof(v);
}
public void prof(int v)
{
int i;
visitado[v]=1;
System.out.println(v);
for(i=0;i<numVertices;i++)
{
-------> if(matAdj[v][i]!=0 && visitado[i]==0) <-------
prof(i);
}
}
Alguém pode me ajudar eu fiquei uma aula inteirinha tentando resolver esse problema.
Estou aproveitando e passando a classe inteira.Derepente o erro não está só nesse método.
import javax.swing.*;
public class Grafo
{
public int numVertices;
public Integer matAdj[][];
public int visitado[];
public Grafo(int nv)
{
numVertices=nv;
matAdj=new Integer[nv][nv];
visitado=new int[nv];
}
public void addAresta (int vi, int vj, int peso)
{
matAdj[vi][vj]=peso;
matAdj[vj][vi]=peso;
}
public void remAresta(int vi, int vj)
{
matAdj[vi][vj]=null;
matAdj[vj][vi]=null;
}
public void imprimePares()
{
int i,j;
String resp="E={";
for(i=0;i<numVertices;i++)
{
for(j=0;j<numVertices;j++)
{
if(matAdj[i][j]!=null)
{
resp+="("+i+","+j+")";
}
}
}
resp+="}";
JOptionPane.showMessageDialog(null,resp,"Pares", JOptionPane.PLAIN_MESSAGE);
}
public int grau (int v)
{
int i, cont=0;
for(i=0;i<=numVertices;i++)
{
if(matAdj[v][i]!=null)
{
cont++;
}
}
return cont;
}
public void imprimeMatAdj()
{
JTable table;
JScrollPane saida;
String nomes[] = new String[numVertices];
for(char i='A';i<'A'+numVertices;i++)
nomes[i-'A']=String.valueOf(i);
table=new JTable(matAdj,nomes);
saida=new JScrollPane(table);
JOptionPane.showMessageDialog(null,saida,"Matriz", JOptionPane.PLAIN_MESSAGE);
}
public void profundidade(int v)
{
int i;
for(i=0;i<numVertices;i++)
visitado[i]=0;
prof(v);
}
public void prof(int v)
{
int i;
visitado[v]=1;
System.out.println(v);
for(i=0;i<numVertices;i++)
{
if(matAdj[v][i]!=0 && visitado[i]==0)
prof(i);
}
}
public boolean caminhoEuler()
{
int cont,i,j;
cont=0;
for(i=0;i<=numVertices;i++)
{
if(grau(i)%2!=0)
cont++;
}
return (cont<=2);
}
public void amplitude(int v)
{
Fila f = new Fila();
int i,nodo;
for(i=0;i<numVertices;i++)
visitado[i]=0;
f.enfileirar(v);
visitado[v]=1;
while(f.vazia()==false)
{
nodo=f.desenfileirar();
for(i=0;i<numVertices;i++)
{
if(matAdj[nodo][i]!=0 && visitado[i]==0)
{
JOptionPane.showMessageDialog(null,"A amplitude é:"+i,"Profundidade", JOptionPane.PLAIN_MESSAGE);
visitado[i]=1;//marca como visitado
f.enfileirar(i);
}
}
}
}
}
Vou agradecendo desde já!