public EntContenedor AplicaAlgoritmo(EntContenedor oEntContenedor, TipoAlgoritmo eTipoAlgoritmo) { string camino = string.Empty; string nodoHijo = string.Empty; string nodoPadre = string.Empty; int aux = 0; try { for (int i = 0; i < oEntContenedor.lstEntNodo.Count; i++) { EntNodo oEntNodo = oEntContenedor.lstEntNodo[i]; if (i == 0) { oEntNodo.esSeleccionado = true; oEntNodo.nodoPrevio = oEntNodo.nombreNodo; nodoHijo = oEntNodo.nombreNodo; nodoPadre = oEntNodo.nombreNodo; if (eTipoAlgoritmo == TipoAlgoritmo.Greedy) { oEntContenedor.lstEntNodo = this.ActualizaVertices(oEntContenedor.lstEntNodo, oEntNodo.idNodo); } oEntContenedor.lstResultados.Add(this.CreaResultado(aux, nodoPadre)); } if (oEntNodo.nombreNodo == nodoHijo) { oEntNodo.esSeleccionado = true; oEntNodo.nodoPrevio = nodoPadre; oEntNodo.peso = aux; oEntNodo.lstEntVertice = this.OrdenaLista(oEntNodo.lstEntVertice); for (int j = 0; j < oEntNodo.lstEntVertice.Count; j++) { EntVertice oEntVertice = oEntNodo.lstEntVertice[j]; if (j == 0) { i = oEntVertice.idNodo - 2; aux = oEntNodo.peso + oEntVertice.peso; nodoHijo = oEntVertice.nombreNodo; } oEntContenedor.lstEntNodo = this.ActualizaVertices(oEntContenedor.lstEntNodo, oEntVertice.idNodo); } nodoPadre = oEntNodo.nombreNodo; if (eTipoAlgoritmo == TipoAlgoritmo.Greedy) { oEntContenedor.lstEntNodo = this.ActualizaVerticesHijos(oEntContenedor.lstEntNodo, oEntNodo); } oEntContenedor.lstResultados.Add(this.CreaResultado(aux, nodoPadre)); } } } catch (Exception ex) { oEntContenedor.mensajeError = ex.Message; oEntContenedor.eTipoError = TipoError.Error; } return(oEntContenedor); }
private EntVertice CreaVertice(string nombreNodo, string peso) { EntVertice oEntVertice = new EntVertice(); try { oEntVertice.nombreNodo = nombreNodo; oEntVertice.peso = Convert.ToInt32(peso); } catch { throw new ApplicationException("Algunos datos no tienen el formato correcto"); } return(oEntVertice); }
private List <EntNodo> ActualizaVerticesHijos(List <EntNodo> lstEntNodo, EntNodo oEntNodo) { for (int i = 0; i < oEntNodo.lstEntVertice.Count; i++) { EntVertice oEntVertice = oEntNodo.lstEntVertice[i]; for (int j = 0; j < lstEntNodo.Count; j++) { for (int x = 0; x < lstEntNodo[j].lstEntVertice.Count; x++) { EntVertice oEntVerticeB = lstEntNodo[j].lstEntVertice[x]; if (oEntVertice.idNodo == oEntVerticeB.idNodo && oEntVerticeB.idNodo != lstEntNodo.Count) { lstEntNodo[j].lstEntVertice.Remove(oEntVerticeB); x--; } } } } return(lstEntNodo); }
private List <EntNodo> ActualizaIdVertices(List <EntNodo> lstEntNodo) { for (int i = 0; i < lstEntNodo.Count; i++) { EntNodo oEntNodo = lstEntNodo[i]; for (int x = 0; x < lstEntNodo.Count; x++) { EntNodo oEntNodoB = lstEntNodo[x]; for (int j = 0; j < oEntNodoB.lstEntVertice.Count; j++) { EntVertice oEntVertice = oEntNodoB.lstEntVertice[j]; if (oEntVertice.nombreNodo == oEntNodo.nombreNodo) { oEntVertice.idNodo = oEntNodo.idNodo; } } } } return(lstEntNodo); }