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);
		}