コード例 #1
0
 private List <Vertice <string> > _minEncrucijadas(List <Vertice <string> > camino, Vertice <string> origen, Vertice <string> destino, bool[] visitados, List <Vertice <string> > mejorCamino)
 {
     camino.Add(origen);
     visitados[origen.getPosicion() - 1] = true;
     if (origen == destino)
     {
         //Console.WriteLine("\nLongitud camino actual: "+camino.Count);
         //Console.WriteLine("\nLongitud mejor camino: "+mejorCamino.Count);
         foreach (var vertice in camino)
         {
             Console.Write(vertice.getDato() + " ");
         }
         if (camino.Count < mejorCamino.Count)
         {
             //Console.WriteLine("\nHaciendo la copia.");
             mejorCamino.Clear();
             mejorCamino.AddRange(camino);
         }
         return(camino);
     }
     else
     {
         foreach (var ady in origen.getAdyacentes())
         {
             if (!visitados[ady.getDestino().getPosicion() - 1])
             {
                 this._minEncrucijadas(camino, ady.getDestino(), destino, visitados, mejorCamino);
                 visitados[ady.getDestino().getPosicion() - 1] = false;
                 camino.RemoveAt(camino.Count - 1);
             }
         }
     }
     return(null);
 }
コード例 #2
0
		private List<Vertice<int>> _caminoSimpleConDFS(List<Vertice<int>> camino, Vertice<int> origen, Vertice<int> destino, bool[] visitados)
		{
			camino.Add(origen);
			visitados[origen.getPosicion()-1] = true;
			if(origen == destino)
			{
				foreach (var vertice in camino)
				{
					Console.Write(vertice.getDato() + " ");
				}
				return camino;
			}
			else
			{
				foreach (var ady in origen.getAdyacentes())
				{
					if(!visitados[ady.getDestino().getPosicion() - 1])
					{
						this._caminoSimpleConDFS(camino,ady.getDestino(),destino,visitados);
						camino.RemoveAt(camino.Count-1);
					}
				}
			}
			return null;
		}
コード例 #3
0
 private void _DFS(Vertice <T> origen, bool[] visitados)
 {
     Console.Write(origen.getDato() + " ");
     visitados[origen.getPosicion() - 1] = true;
     foreach (var ady in origen.getAdyacentes())
     {
         if (!visitados[ady.getDestino().getPosicion() - 1])
         {
             this._DFS(ady.getDestino(), visitados);
         }
     }
 }
コード例 #4
0
 private void _ordenTopologico(Vertice <int> origen, bool[] visitados, Stack <Vertice <int> > pila)
 {
     //Console.Write(origen.getDato() + " ");
     visitados[origen.getPosicion() - 1] = true;
     foreach (var ady in origen.getAdyacentes())
     {
         if (!visitados[ady.getDestino().getPosicion() - 1])
         {
             this._ordenTopologico(ady.getDestino(), visitados, pila);
         }
     }
     pila.Push(origen);
 }
コード例 #5
0
 private List <Vertice <int> > _caminoMayor(List <Vertice <int> > camino, Vertice <int> origen, Vertice <int> destino, bool[] visitados, List <Vertice <int> > mejorCamino)
 {
     camino.Add(origen);
     visitados[origen.getPosicion() - 1] = true;
     if (origen == destino)
     {
         int tiempo = 0;
         for (int i = 0; i < camino.Count; i++)
         {
             tiempo += camino[i].getDato();
             List <Arista <int> > adyacentes = camino[i].getAdyacentes();
             for (int j = 0; j < adyacentes.Count; j++)
             {
                 if (i != camino.Count - 1)
                 {
                     if (adyacentes[j].getDestino() == camino[i + 1])
                     {
                         tiempo += adyacentes[j].getPeso();
                     }
                 }
             }
         }
         if (camino.Count >= mejorCamino.Count && tiempo <= 120)               //120 min = 2 hs
         {
             mejorCamino.Clear();
             mejorCamino.AddRange(camino);
         }
         return(camino);
     }
     else
     {
         foreach (var ady in origen.getAdyacentes())
         {
             if (!visitados[ady.getDestino().getPosicion() - 1])
             {
                 this._caminoMayor(camino, ady.getDestino(), destino, visitados, mejorCamino);
                 visitados[ady.getDestino().getPosicion() - 1] = false;
                 camino.RemoveAt(camino.Count - 1);
             }
         }
     }
     return(null);
 }
コード例 #6
0
        public void desConectar(Vertice <T> origen, Vertice <T> destino)
        {
            Arista <T> arista = origen.getAdyacentes().Find(a => a.getDestino().Equals(destino));

            origen.getAdyacentes().Remove(arista);
        }
コード例 #7
0
 public void conectar(Vertice <T> origen, Vertice <T> destino, int peso)
 {
     origen.getAdyacentes().Add(new Arista <T>(destino, peso));
     destino.aumentarGradoEntrada();
 }