diff --git a/map.h b/map.h index 9b76cac..e0f8958 100755 --- a/map.h +++ b/map.h @@ -31,7 +31,6 @@ namespace battleship{ struct Cell{ enum Type{LAND, WATER}; - bool checked = false; Type type; vb01::Vector3 pos; std::vector edges; @@ -39,7 +38,6 @@ namespace battleship{ Cell(){} Cell(vb01::Vector3 p, Type t, std::vector e = std::vector{}, std::vector uc = std::vector{}): pos(p), type(t), edges(e), underWaterCellIds(uc){} - //int getEdgeWeight(int); }; static Map* getSingleton(); diff --git a/pathfinder.cpp b/pathfinder.cpp index 2d6148a..fbe8f41 100644 --- a/pathfinder.cpp +++ b/pathfinder.cpp @@ -16,17 +16,17 @@ namespace battleship{ return pathfinder; } - int Pathfinder::findMinDistVert(vector &cells, u32 distances[]){ + int Pathfinder::findMinDistVert(vector> &cells, u32 distances[]){ int numCells = cells.size(), minDistVert; for(int i = 0; i < numCells; i++) - if(!cells[i].checked){ + if(!cells[i].second){ minDistVert = i; break; } for(int i = 0; i < numCells; i++){ - bool checked = cells[i].checked; + bool checked = cells[i].second; if(!checked && distances[i] < distances[minDistVert]) minDistVert = i; @@ -40,15 +40,16 @@ namespace battleship{ u32 distances[size]; vector paths[size]; paths[source].push_back(source); + vector> cellsByCheck; for(int i = 0; i < size; i++){ - cells[i].checked = false; + cellsByCheck.push_back(pair(i, false)); distances[i] = (i == source ? 0 : impassibleNodeVal); } - while(!cells[dest].checked){ - int vertStrich = findMinDistVert(cells, distances); - cells[vertStrich].checked = true; + while(!cellsByCheck[dest].second){ + int vertStrich = findMinDistVert(cellsByCheck, distances); + cellsByCheck[vertStrich].second = true; int numEdges = cells[vertStrich].edges.size(); @@ -61,7 +62,7 @@ namespace battleship{ if(canMoveToStrichCell){ int edgeNode = cells[vertStrich].edges[i].destCellId; - bool isChecked = cells[edgeNode].checked; + bool isChecked = cellsByCheck[edgeNode].second; if(!isChecked && (distances[vertStrich] + cells[vertStrich].edges[i].weight < distances[edgeNode])){ distances[edgeNode] = distances[vertStrich] + cells[vertStrich].edges[i].weight; @@ -72,9 +73,6 @@ namespace battleship{ } } - for(int i = 0; i < size; i++) - cells[i].checked = false; - return paths[dest]; } } diff --git a/pathfinder.h b/pathfinder.h index d1fb88b..a91d64b 100644 --- a/pathfinder.h +++ b/pathfinder.h @@ -16,7 +16,7 @@ namespace battleship{ inline void setImpassibleNodeVal(vb01::u32 val){this->impassibleNodeVal = val;} private: Pathfinder(){} - int findMinDistVert(std::vector&, vb01::u32[]); + int findMinDistVert(std::vector>&, vb01::u32[]); vb01::u32 impassibleNodeVal; };