Java - Problemas en grafo

 
Vista:

Problemas en grafo

Publicado por Polo (1 intervención) el 08/11/2006 02:17:34
Hola a todos tengo que hacer un proyecto de grafos y me da un error en crear la cola y la pila, no se que hacer ahi le paso el codigo.

//Grafo.java

////////////////////////////////////////
class Cola //Estructura que utilizamos para el Grafo
{
private final int tamano = 20; // Tamaño maximo de la Cola
private int [] arreglo; //Creacion del arreglo de la cola
private int primero; // Marca al Primero de la Cola
private int ultimo; // Marca al Ultimo de la Cola
//- - - - - - - - - - - - - - - - - - - -
public Cola() // Constructor de la cola
{
arreglo = new int[tamano];
primero=0;
ultimo=-1;
}
//- - - - - - - - - - - - - - - - - - - -
public void insertar (int j) //Inserta un elemento al final de la Cola
{
if (ultimo==tamano-1)
ultimo = -1;
arreglo[++ultimo]=j;
}
//- - - - - - - - - - - - - - - - - - - -
public boolean estavacia () //devuelve si la cola esta Vacia o no
{
return (ultimo+1==primero);
}
//- - - - - - - - - - - - - - - - - - - -
public int quitar () // Devuelve el primer valor de la cola
{
int temp=Arreglo[primero++];
if(primero==tamano)
primero = 0;
return temp;
}
//- - - - - - - - - - - - - - - - - - - -
} //Fin de la clase cola
////////////////////////////////////////
class Pila //Estructura que utilizamos para el Grafo
{
private final int tamano = 20; // Tamaño maximo de la Pila
private int [] arreglo; //Creacion del arreglo de la Pila
private int indicador; // Marca el Ultimo de la Pila

//- - - - - - - - - - - - - - - - - - - -
public Pila() // Constructor de la cola
{
arreglo = new int[tamano];
indicador=-1;
}
//- - - - - - - - - - - - - - - - - - - -
public void push (int j) //Inserta un elemento en la pila
{
arreglo[++indicador]=j;
}
//- - - - - - - - - - - - - - - - - - - -
public boolean estavacia () //devuelve si la pila esta Vacia o no
{
return (indicador==-1);
}
//- - - - - - - - - - - - - - - - - - - -
public int pop () // Devuelve el valor marcado por el indicador de la pila y decrementa el indicador
{
return arreglo[indicador--];
}
//- - - - - - - - - - - - - - - - - - - -
public int ver () // Devuelve el valor marcado por el indicador de la pila
{
return arreglo[indicador];
}
//- - - - - - - - - - - - - - - - - - - -
} //Fin de la clase Pila
////////////////////////////////////////
class Vertice
{
public char vert; //tipo de vertice
public boolean Visitado;
//- - - - - - - - - - - - - - - - - - - -
public Vertice (char nombrevertice)//Constructor
{
vert=nombrevertice;
visitado=false;
} //fin del Constructor
//- - - - - - - - - - - - - - - - - - - -
}// Fin clase Vertice
////////////////////////////////////////
class Grafo
{
private final int MaxVertices=20;// Maximo de Vertices
private Vertice ListadeVertices[];//lista de vertices
private int Matriz[][];
private int n; // Numero de vertices
//- - - - - - - - - - - - - - - - - - - -
public Grafo()//Constructor
{
ListadeVertices=new Vertice[MaxVertices];
Matriz = new int[MaxVertices][MaxVertices];
n=0;
for (int j=0;j<MaxVertices;j++)
for (int i=0;i<MaxVertices;i++)
Matriz[j][i]=0; // Pone la Matriz a 0 lo que significa que no hay ningun peso entre ellos
}// fin del Constructor
//- - - - - - - - - - - - - - - - - - - -
public void AgregarVertice (char nombre) // POner Vertice en la Lista
{
ListadeVertices[n++]= new Vertice (nombre);
}
//- - - - - - - - - - - - - - - - - - - -
public void AgregarArista (int inicio,int Final,int peso)//Poner Arista Con peso
{
Matriz [inicio][Final]=peso;
Matriz [Final][inicio]=peso;
}
//- - - - - - - - - - - - - - - - - - - -
public void MostrarVertice(int v)// Muestra el vertice
{
System.out.print (ListadeVertices[v]);
}// Fin de Mostrar
//- - - - - - - - - - - - - - - - - - - -
public int AdyacenteNoVisitado(int v)
{
for (intj=0;j<n;j++)
if (Matriz [v][j]>0 && ListadeVertices[j].visitado==false)
return j; // si lo encontramos devolvemos el vector
return -1; // si no lo encontramos devolvemos -1
} // fin de adyacente no visitado
//- - - - - - - - - - - - - - - - - - - -
public void bfs() // Mostrar Grafo en Modo BFS
{
ListadeVertices[0].visitado=true;
MostrarVertice(0);
Cola MiCola;
MiCola=New Cola();
MiCola.insertar(0);
int v2;
While (!MiCola.Novacia());
{
int v1 = MiCola.quitar();
While ((v2=AdyacenteNovisitado(v1))!= -1);
{
ListadeVertices[v2].visitado=true;
MostrarVertice(v2);
MiCola.insertar(v2);

}
}
for(int j=0; j<n; j++)
ListadeVertices[j].visitado = false;
}// fin de bfs
//- - - - - - - - - - - - - - - - - - - -
public void dfs() // Mostrar Grafo en Modo BFS
{
ListadeVertices[0].visitado=true;
MostrarVertice(0);
Pila MiPila;
MiPila=New Pila();
MiPila.push(0);
While (!MiPila.Novacia());
{
int v = v2=AdyacenteNovisitado(MiPila.ver());
if (v==-1)
MiPila.pop();
else
{
ListadeVertices[v].visitado=true;
MostrarVertice(v);
MiPila.push(v);
}
}
for(int j=0; j<n; j++)
ListadeVertices[j].visitado = false;
}// fin de bfs
//- - - - - - - - - - - - - - - - - - - -

}//Fin clase Grafo
////////////////////////////////////////
class Prueba
{
public static void main (String[]args)
{ Grafo MiGrafo = new Grafo();
MiGrafo.AgregarVertice('A');
MiGrafo.AgregarVertice('B');
MiGrafo.AgregarVertice('C');
MiGrafo.AgregarVertice('D');
MiGrafo.AgregarVertice('E');
MiGrafo.AgregarArista(0,1,10);
MiGrafo.AgregarArista(0,3,10);
MiGrafo.AgregarArista(1,2,10);
MiGrafo.AgregarArista(2,1,10);
MiGrafo.AgregarArista(1,3,10);
MiGrafo.AgregarArista(0,2,10);
MiGrafo.dfs();
}
}

Agradezco a todos por tomar su tiempo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder