void existsInNextMapDFS(int currMapID, int startMapID, int destMapID, int numRecursions, cliext::vector<MapPath^>^ searchList, cliext::vector<MapPath^>^ finalPath,bool &destFound,int &i) {
if (currMapID == destMapID) {
if ((int)(finalPath->size()) == 0 || finalPath->size() > searchList->size())
*finalPath = searchList; //Current path is the shortest path to destination map
return; //Returning so that no further maps from this one are searched
}
if (getMap(currMapID)->portals->Count == 0 || numRecursions > 300) {
return;
}
//If current map is an endpoint or if number of recursions are over 300, no further maps are searched
for each(PortalData^ portalData in getMap(currMapID)->portals) {
Log::WriteLine("for loop portaldata");
bool existsInSearchList = false;
for each (MapPath ^ mapData in searchList) {
if (mapData->mapID == portalData->toMapID) {
Log::WriteLine("for loop mapdata");
existsInSearchList = true;
break;
}
}
if (getMap(portalData->toMapID) == nullptr) {
continue; //Skips portals where the portal's map is not found
}
if (existsInSearchList) {
continue; //Skip portals where it goes to maps already in search path to prevent loop backs
}
MapPath^ mapPath = gcnew MapPath(currMapID, portalData);
searchList->push_back(mapPath);
existsInNextMapDFS(portalData->toMapID, startMapID, destMapID, numRecursions + 1, searchList, finalPath,destFound,i); //Recursive call
searchList->pop_back();
}
Эй, я пытаюсь написать шкипер карты для игры на 2d-платформе, каждая карта имеет номер портала, который хранится в карте DATA, мне нужен кратчайший маршрут, чтобы добраться до карты назначения. Идея состоит в том, чтобы go пройти через все порталы на каждой карте, пока не будет достигнут пункт назначения, и вернуть маршрут. это то, что я получил до сих пор, но он иногда застревает и не ищет новые карты. я пытался отлаживать его часами, но все еще не мог найти решение.