- if (settled.find(street->first) != settled.end())
- continue;
- //cerr << "Adding: " << street->first << endl;
- bool hascar = type == "cop-car";
- if ( (hascar && (street->second == car || street->second == both)) ||
- (!hascar && (street->second == foot || street->second == both))){
-
- v = w;
- v.push_back(street->first);
- pq.push(v);
+ hash_map<string,SPInfo>::iterator newNode = nodes.find(street->first);
+ bool travelStreet = false;
+ if (hascar){
+ if (reverse){
+ if (street->second != foot){
+ hash_map<string,StreetType>::const_iterator st = _intersections[street->first].connections.find(node->name);
+ if (st != _intersections[street->first].connections.end())
+ travelStreet = st->second != foot;
+ else
+ travelStreet = false;
+ }else
+ travelStreet = true;
+ }else
+ travelStreet = street->second != foot;
+ }else{
+ travelStreet = street->second != car;
+ }
+ if (travelStreet){
+ //cerr << "Adding street: " << street->first << endl;
+ SPInfo* n = 0;
+ if (newNode == nodes.end()){
+ n = &nodes[street->first];
+ n->name = street->first;
+ n->settled = false;
+ n->parent = 0;
+ n->cost = 10000;
+ }else if (newNode->second.settled)
+ continue;
+ else
+ n = &newNode->second;
+
+ if (n->cost > node->cost + 1){
+ n->cost = node->cost + 1;
+ n->parent = node;
+ pq.push(n);
+ }