public Grafo (List<Calle> calles) { nodos = new Hashtable(); //Se agregan todos los nodos aun sin conectar Nodo nodo; for(int x=0; x<calles.Count; x++) { nodo = new Nodo (calles[x].Id, calles[x].Largo); nodos.Add (calles[x].Id, nodo); } nodo = null; //Se conectan los nodos for(int x=0; x<calles.Count; x++) { Calle calle; Interseccion[] salida = new Interseccion[2]; salida [0] = calles [x].Salida1; salida [1] = calles [x].Salida2; for (int y = 0; y < salida.Length; y++) { if (salida [y] != null && ((y == 0 && (calles [x].SentidoCarril1 == Elemento.DE2A1 || calles [x].SentidoCarril2 == Elemento.DE2A1)) || (y == 1 && (calles [x].SentidoCarril1 == Elemento.DE1A2 || calles [x].SentidoCarril2 == Elemento.DE1A2)))) { if (salida [y].Norte != null) { calle = salida [y].Norte;//Calle al norte if (calles [x].Id != calle.Id && (calle.SentidoCarril1 == Elemento.DE2A1 || calle.SentidoCarril2 == Elemento.DE2A1)) { nodo = (Nodo)nodos [calles [x].Id]; nodo.agregarNodoAdyacente ((Nodo)nodos [calle.Id]); } } if (salida [y].Sur != null) { calle = salida [y].Sur;//Calle al sur if (calles [x].Id != calle.Id && (calle.SentidoCarril1 == Elemento.DE1A2 || calle.SentidoCarril2 == Elemento.DE1A2)) { nodo = (Nodo)nodos [calles [x].Id]; nodo.agregarNodoAdyacente ((Nodo)nodos [calle.Id]); } } if (salida [y].Este != null) { calle = salida [y].Este;//Calle al este if (calles [x].Id != calle.Id && (calle.SentidoCarril1 == Elemento.DE1A2 || calle.SentidoCarril2 == Elemento.DE1A2)) { nodo = (Nodo)nodos [calles [x].Id]; nodo.agregarNodoAdyacente ((Nodo)nodos [calle.Id]); } } if (salida [y].Oeste != null) { calle = salida [y].Oeste;//Calle al oeste if (calles [x].Id != calle.Id && (calle.SentidoCarril1 == Elemento.DE2A1 || calle.SentidoCarril2 == Elemento.DE2A1)) { nodo = (Nodo)nodos [calles [x].Id]; nodo.agregarNodoAdyacente ((Nodo)nodos [calle.Id]); } } } } } }
public void agregarNodoAdyacente(Nodo adyacente) { nodosAdyacentes.Add (adyacente); }