@@ -361,8 +361,9 @@ int GameBoard::FindLongestRoad(Player & owner){
361361 for (auto roadVector = roads.begin (); roadVector != roads.end (); ++roadVector){
362362 // find the longest path from v
363363 std::map<Coordinate, bool > marked;
364+ std::map<Road*, bool > markedRoads;
364365 Coordinate start = roadVector->first ;
365- int temp_longest_path = FindLongestRoad_FromPoint (start, owner, marked, 0 );
366+ int temp_longest_path = FindLongestRoad_FromPoint (start, owner, marked, markedRoads, 0 );
366367
367368 // if that path is longer than the current longest, set to the longest
368369 if (temp_longest_path > longest_path)
@@ -373,7 +374,7 @@ int GameBoard::FindLongestRoad(Player & owner){
373374}
374375
375376
376- int GameBoard::FindLongestRoad_FromPoint (Coordinate curr, Player & owner, std::map<Coordinate, bool >& marked, int length){
377+ int GameBoard::FindLongestRoad_FromPoint (Coordinate curr, Player & owner, std::map<Coordinate, bool >& marked, std::map<Road*, bool >& markedRoads, int length){
377378 marked[curr] = true ;
378379 int longest_path = length;
379380 // traverse all the surrounding edges and vertices
@@ -382,17 +383,17 @@ int GameBoard::FindLongestRoad_FromPoint(Coordinate curr, Player & owner, std::m
382383 int temp_longest_path = length;
383384
384385 // if the owner is correct and the road is unmarked
385- if ( !(* road)-> isMarked () && (*road)->owner ->getName (). compare ( owner.getName ()) == 0 ){
386+ if ( !markedRoads[ road-> get ()] && (*road)->owner ->getName () == owner.getName ()){
386387
387388 temp_longest_path++;
388- (* road)-> mark () ;
389+ markedRoads[ road-> get ()] = true ;
389390 // Check if you can traverse to the next vertex and make that step if you can
390391 if (curr != (*road)->getStart () && !marked[(*road)->getStart ()]){
391- temp_longest_path = FindLongestRoad_FromPoint ((*road)->getStart (), owner, marked, temp_longest_path);
392+ temp_longest_path = FindLongestRoad_FromPoint ((*road)->getStart (), owner, marked, markedRoads, temp_longest_path);
392393 }else if (curr != (*road)->getEnd () && !marked[(*road)->getEnd ()]){
393- temp_longest_path = FindLongestRoad_FromPoint ((*road)->getEnd (), owner, marked, temp_longest_path);
394+ temp_longest_path = FindLongestRoad_FromPoint ((*road)->getEnd (), owner, marked, markedRoads, temp_longest_path);
394395 }
395- (* road)-> unmark () ;
396+ markedRoads[ road-> get ()] = false ;
396397 }
397398
398399 if (temp_longest_path > longest_path)
0 commit comments