Revision 8523 trunk/extensions/extGraph_predes/src/com/iver/cit/gvsig/graph/solvers/ShortestPathSolverAStar.java

View differences:

ShortestPathSolverAStar.java
490 490
		GvNode node, toNode, finalNode, bestNode; // , *pNodoProv;
491 491
		GvEdge link;
492 492
		boolean bExit = false;
493
		double bestCost;
494 493

  
495 494
		boolean bGiroProhibido;
496 495
		ArrayList candidatos = new ArrayList();
497 496

  
498
		GvTurn elGiro;
499 497
		// char Mensaje[200];
500 498
		
501 499
		IGraph graph = net.getGraph();
......
531 529
		candidatos.add(node);
532 530
		node.setBestCost(0);
533 531
		node.setStatus(GvNode.statNowInList);
534
		node.calculateStimation(finalNode);
532
		node.calculateStimation(finalNode, 0);
535 533

  
536
		bestCost = Double.MAX_VALUE;
537

  
538 534
		// Mientras que la lista de candidatosSTL no est? vac?a, procesamos
539 535
		// Nodos
540 536
		double bestStimation;
......
543 539
			// Buscamos el nodo con m?nimo coste
544 540
			node = (GvNode) candidatos.get(0);
545 541
			bestNode = node;
546
			bestCost = node.getBestCost();
547 542
			bestStimation = node.getStimation();
548 543
			for (nodeNum = 1; nodeNum < candidatos.size(); nodeNum++) {
549 544
				node = (GvNode) candidatos.get(nodeNum);
......
600 595
				// Miramos a ver si podemos mejorar su best_cost
601 596
				newCost = node.getBestCost() + link.getWeight();
602 597

  
603
				// Miramos la lista de Giros de ese nodo
604
				bGiroProhibido = false;
605
				for (int idGiro = 0; idGiro < node.getTurns().size(); idGiro++) {
606
					// Si est? prohibido, a por otro
607
					elGiro = (GvTurn) node.getTurns().get(idGiro);
608
					// TODO: HABILITAR ESTO
609
					// if ((elGiro.idTramoOrigen ==
610
					// Arcos[pNodo->from_link].idTramo) &&
611
					// (elGiro.idTramoDestino == pEnlace->idTramo))
612
					// {
613
					// if (elGiro.cost < 0)
614
					// {
615
					// bGiroProhibido = true;
616
					// // No podemos inicializar por completo el nodo porque
617
					// entonces
618
					// // perdemos el fromLink (el arco desde donde hemos
619
					// llegado hasta
620
					// // este nodo, que es necesario para calcular los
621
					// costes y generar
622
					// // el shape recorriendo hacia atr?s el camino
623
					// realizado.
624
					// // Si hab?a m?s de un nodo con costes prohibidos,
625
					// cab?a la posibilidad
626
					// // de que perdieramos este enlace.
627
					//									
628
					// // Para que pueda volver a entrar en c?lculos
629
					// pNodo->status = statNotInList;
630
					// pNodo->best_cost = INFINITO;
631
					//
632
					// }
633
					// else
634
					// newCost += elGiro.cost;
635
					// break; // Salimos del for porque ya hemos encontrado
636
					// el giro
637
					// }
638
				}
639
				// Si est? prohibido, vamos a por otro enlace, PERO
640
				// MARCAMOS EL NODO
641
				// COMO NO VISITADO PARA QUE PUEDA VOLVER A ENTRAR EN LA
642
				// LISTA DE CANDIDATOS
643
				// SI VENIMOS POR OTRO LADO.
644
				if (bGiroProhibido) {
645
					continue;
646
				}
647

  
648 598
				if (newCost < toNode.getBestCost()) {
649 599
					// Es una mejora, as? que actualizamos el vecino y
650 600
					// lo a?adimos a los candidatosSTL
651 601
					toNode.setBestCost(newCost);					 
652 602
					toNode.setFromLink(link.getIdEdge());
653 603
					
654
					toNode.calculateStimation(finalNode);
604
					toNode.calculateStimation(finalNode, newCost);
655 605

  
656 606
					if (toNode.getStatus() != GvNode.statNowInList) {
657 607
						toNode.setStatus(GvNode.statNowInList);

Also available in: Unified diff