Сначала поиск глубины, чтобы найти кратчайший путь C ++ - PullRequest
1 голос
/ 26 апреля 2020
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 пройти через все порталы на каждой карте, пока не будет достигнут пункт назначения, и вернуть маршрут. это то, что я получил до сих пор, но он иногда застревает и не ищет новые карты. я пытался отлаживать его часами, но все еще не мог найти решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...