Nodo ExistePunto(int x, int y) { Encabezado aux = eje_x.primero; if (aux == null) { return(null); } else { while (aux != null) { Nodo actual = aux.acceso; while (actual != null) { if ((x == actual.x) && (y == actual.y)) { return(actual); } actual = actual.derecha; } aux = aux.siguiente; } } return(null); }
public Encabezado(int id) { this.id = id; this.nivel0 = 0; this.nivel1 = 0; this.nivel2 = 0; this.nivel3 = 0; this.acceso = null; this.siguiente = null; this.anterior = null; }
public Encabezado getEncabezado(int id) { Encabezado aux = primero; while (aux != null) { if (aux.id == id) { return(aux); } aux = aux.siguiente; } return(null); }
void CambiarConexiones(Nodo aux, Nodo nuevo) { //-------------- DERECHA ---------------- if (aux.derecha != null) { aux.derecha.izquierda = nuevo; nuevo.derecha = aux.derecha; aux.derecha = null; } //------------- IZQUIERDA --------------- if (aux.izquierda != null) { aux.izquierda.derecha = nuevo; nuevo.izquierda = aux.izquierda; aux.izquierda = null; } else { //es el acceso de un encabezado en x Encabezado encabezado_x = eje_x.getEncabezado(aux.x); encabezado_x.acceso = nuevo; } //--------------- ARRIBA ---------------- if (aux.arriba != null) { aux.arriba.abajo = nuevo; nuevo.arriba = aux.arriba; aux.arriba = null; } else { //es el acceso de un encabezado en y Encabezado encabezado_y = eje_y.getEncabezado(aux.y); encabezado_y.acceso = nuevo; } //--------------- ABAJO ----------------- if (aux.abajo != null) { aux.abajo.arriba = nuevo; nuevo.abajo = aux.abajo; aux.abajo = null; } }
public void Insertar(Encabezado nuevo) { if (primero == null) { primero = ultimo = nuevo; } else { if (nuevo.id < primero.id)//Inserción al inicio de la lista { primero.anterior = nuevo; nuevo.siguiente = primero; primero = nuevo; } else if (nuevo.id > ultimo.id) //Inserción al final { ultimo.siguiente = nuevo; nuevo.anterior = ultimo; ultimo = nuevo; } else { Encabezado aux = primero; while (aux.siguiente != null) { if (nuevo.id < aux.siguiente.id) { nuevo.siguiente = aux.siguiente; aux.siguiente.anterior = nuevo; nuevo.anterior = aux; aux.siguiente = nuevo; break; } aux = aux.siguiente; } } } }
string GraficarBarcos() { StringBuilder b = new StringBuilder(); //---------------- INICIO DE ESCRITURA --------------- b.Append("digraph Barcos{" + Environment.NewLine); b.Append(" node[\n"); b.Append(" fontname = \"Bitstream Vera Sans\"\n"); b.Append(" fontsize = 8\n"); b.Append(" fillcolor=seashell2\n"); b.Append(" style = filled\n"); b.Append(" shape = box\n"); b.Append(" ];\n"); b.Append(" edge[\n"); b.Append(" fontname = \"Bitstream Vera Sans\"\n"); b.Append(" fontsize = 10\n"); b.Append(" ];\n"); b.Append("rankdir=UD;\n" + Environment.NewLine); b.Append("{\n" + Environment.NewLine); b.Append("rank=min;\n" + Environment.NewLine); b.Append("m[label=\"matriz\"];\n" + Environment.NewLine); //---------------- LISTADO DE ENCABEZADOS DE Y--------------- Encabezado encabezado_y = eje_y.primero; while (encabezado_y != null) { if (encabezado_y.nivel1 > 0) { //Si existe un nivel 1 para ese encabezado entonces si se grafica b.AppendFormat("nodey{0}[label=\"{1}\"];\n", getColumnName(encabezado_y.id), getColumnName(encabezado_y.id), Environment.NewLine); } encabezado_y = encabezado_y.siguiente; } b.Append("};\n" + Environment.NewLine); //------ LISTADO DE ENCABEZADOS DE X Y NODOS INTERNOS -------- Encabezado encabezado_x = eje_x.primero; while (encabezado_x != null) { if (encabezado_x.nivel1 > 0) { //Si existe un nivel 1 para el encabezado entonces si se grafica b.Append("{\n" + Environment.NewLine); b.Append("rank=same;\n" + Environment.NewLine); b.AppendFormat("nodex{0}[label=\"{1}\"];\n", encabezado_x.id, encabezado_x.id, Environment.NewLine); Nodo casilla = encabezado_x.acceso; while (casilla != null) { if (casilla.z == 1) { b.AppendFormat("nodel{0}{1}[label=\"x:{2} y:{3} z:{4} \\l tipo:{5} \\l unidad:{6} \\l alcance:{7} \\l movimiento:{8} \\l daño:{9} \\l vida:{10}\"];\n", casilla.x, casilla.y, casilla.x, casilla.y, casilla.z, casilla.tipo, casilla.unidad, casilla.alcance, casilla.movimiento, casilla.damage, casilla.vida, Environment.NewLine); } casilla = casilla.derecha; } b.Append("}\n" + Environment.NewLine); } encabezado_x = encabezado_x.siguiente; } //-------------------- ENLACES INTERNOS DE Y ----------------- Nodo first = null; bool puedeEnlazar = false; Encabezado tempy = eje_y.primero; while (tempy != null) { if (tempy.nivel1 > 0) { Nodo auxColum = tempy.acceso; while (auxColum != null) { if (auxColum.z == 1) { if (puedeEnlazar == false) { first = auxColum; puedeEnlazar = true; } else { b.AppendFormat("nodel{0}{1}->nodel{2}{3}\n", first.x, first.y, auxColum.x, auxColum.y, Environment.NewLine); b.AppendFormat("nodel{0}{1}->nodel{2}{3}\n", auxColum.x, auxColum.y, first.x, first.y, Environment.NewLine); first = auxColum; } } auxColum = auxColum.abajo; } first = null; puedeEnlazar = false; } tempy = tempy.siguiente; } //------------ UNIENDO CABECERAS DE Y CON ACCESO -------------- Encabezado auxy = eje_y.primero; while (auxy != null) { if (auxy.nivel1 > 0) { Nodo auxColumn = auxy.acceso; while (auxColumn != null) { if (auxColumn.z == 1) { b.AppendFormat("nodey{0}->nodel{1}{2};\n", getColumnName(auxy.id), auxColumn.x, auxColumn.y, Environment.NewLine); break; } auxColumn = auxColumn.abajo; } } auxy = auxy.siguiente; } //------------------ ENLACES INTERNOS DE X -------------------- first = null; puedeEnlazar = false; Encabezado tempx = eje_x.primero; while (tempx != null) { if (tempx.nivel1 > 0) { Nodo auxfil = tempx.acceso; while (auxfil != null) { if (auxfil.z == 1) { if (puedeEnlazar == false) { first = auxfil; puedeEnlazar = true; } else { b.AppendFormat("nodel{0}{1}->nodel{2}{3}\n", first.x, first.y, auxfil.x, auxfil.y, Environment.NewLine); b.AppendFormat("nodel{0}{1}->nodel{2}{3}\n", auxfil.x, auxfil.y, first.x, first.y, Environment.NewLine); first = auxfil; } } auxfil = auxfil.derecha; } first = null; puedeEnlazar = false; } tempx = tempx.siguiente; } //----------------- UNIENDO CABECERAS DE X CON ACCESO----------- Encabezado auxx = eje_x.primero; while (auxx != null) { if (auxx.nivel1 > 0) { Nodo auxfil = auxx.acceso; while (auxfil != null) { if (auxfil.z == 1) { b.AppendFormat("nodex{0}->nodel{1}{2};\n", auxx.id, auxfil.x, auxfil.y, Environment.NewLine); break; } auxfil = auxfil.derecha; } } auxx = auxx.siguiente; } //------------------------ ENCABEZADOS ------------------------ Encabezado temporal_x = eje_x.primero; Encabezado temporal_y = eje_y.primero; b.Append("m"); while (temporal_y != null) { if (temporal_y.nivel1 > 0) { b.AppendFormat("->nodey{0}", getColumnName(temporal_y.id), Environment.NewLine); } temporal_y = temporal_y.siguiente; } b.Append(";\n"); b.Append("m"); while (temporal_x != null) { if (temporal_x.nivel1 > 0) { b.AppendFormat("->nodex{0}", temporal_x.id); } temporal_x = temporal_x.siguiente; } b.Append(";\n"); b.Append("}"); return(b.ToString()); }
void InsertarNuevo(Nodo nuevo) { // //INSERCIÓN FILAS Encabezado encabezado_x = eje_x.getEncabezado(nuevo.x); if (encabezado_x == null) { //Si no existe el encabezado hay que crearlo encabezado_x = new Encabezado(nuevo.x); this.eje_x.Insertar(encabezado_x); encabezado_x.acceso = nuevo; if (nuevo.z == 0) { encabezado_x.nivel0++; } else if (nuevo.z == 1) { encabezado_x.nivel1++; } else if (nuevo.z == 2) { encabezado_x.nivel2++; } else if (nuevo.z == 3) { encabezado_x.nivel3++; } } else if (encabezado_x.acceso == null) { //No es necesario, pero ahí que quede encabezado_x.acceso = nuevo; } else { if (nuevo.y < encabezado_x.acceso.y) { //Inserción al inicio nuevo.derecha = encabezado_x.acceso; encabezado_x.acceso.izquierda = nuevo; encabezado_x.acceso = nuevo; } else { Nodo actual = encabezado_x.acceso; //Inserción en el medio while (actual.derecha != null) { if (nuevo.y < actual.derecha.y) { nuevo.derecha = actual.derecha; actual.derecha.izquierda = nuevo; nuevo.izquierda = actual; actual.derecha = nuevo; break; } actual = actual.derecha; } if (actual.derecha == null) { //Inserción al final actual.derecha = nuevo; nuevo.izquierda = actual; } } if (nuevo.z == 0) { encabezado_x.nivel0++; } else if (nuevo.z == 1) { encabezado_x.nivel1++; } else if (nuevo.z == 2) { encabezado_x.nivel2++; } else if (nuevo.z == 3) { encabezado_x.nivel3++; } } //FIN DE LA INSERCIÓN DE FILAS //INSERCIÓN COLUMNAS Encabezado encabezado_y = eje_y.getEncabezado(nuevo.y); if (encabezado_y == null) //Si no existe se crea un nuevo encabezado. { encabezado_y = new Encabezado(nuevo.y); this.eje_y.Insertar(encabezado_y); encabezado_y.acceso = nuevo; if (nuevo.z == 0) { encabezado_y.nivel0++; } else if (nuevo.z == 1) { encabezado_y.nivel1++; } else if (nuevo.z == 2) { encabezado_y.nivel2++; } else if (nuevo.z == 3) { encabezado_y.nivel3++; } } else if (encabezado_y.acceso == null) { //No es necesario encabezado_y.acceso = nuevo; } else { if (nuevo.x < encabezado_y.acceso.x) { //Inserción al inicio nuevo.abajo = encabezado_y.acceso; encabezado_y.acceso.arriba = nuevo; encabezado_y.acceso = nuevo; } else { Nodo actual = encabezado_y.acceso; while (actual.abajo != null) { if (nuevo.x < actual.abajo.x) { nuevo.abajo = actual.abajo; actual.abajo.arriba = nuevo; nuevo.arriba = actual; actual.abajo = nuevo; break; } actual = actual.abajo; } if (actual.abajo == null) { actual.abajo = nuevo; nuevo.arriba = actual; } } if (nuevo.z == 0) { encabezado_y.nivel0++; } else if (nuevo.z == 1) { encabezado_y.nivel1++; } else if (nuevo.z == 2) { encabezado_y.nivel2++; } else if (nuevo.z == 3) { encabezado_y.nivel3++; } } //FIN DE INSERCIÓN COLUMNAS }
public ListaEncabezados() { primero = ultimo = null; }