diff --git a/C++ProjectTemplate b/C++ProjectTemplate index 8c19bf9..36df910 100755 Binary files a/C++ProjectTemplate and b/C++ProjectTemplate differ diff --git a/main.cpp b/main.cpp index 736a22a..4d675c3 100644 --- a/main.cpp +++ b/main.cpp @@ -1,20 +1,31 @@ -#define OLC_PGE_APPLICATION -#include "pixelGameEngine.h" -#include "olcutils.h" +#include +#include +#include +#include -using namespace olc; +struct vi2d{ + int x,y; + friend std::ostream&operator<<(std::ostream&out,vi2d&rhs){ + out<<"("<connections; int myDist=INFINITY; - int storedDist=INFINITY; vi2d pos; node*parent=nullptr; node(char elevation){ this->elevation=elevation; }; + char getElevation(){ + return elevation=='S'?'a':elevation=='E'?'z'+1:elevation; + } }; @@ -26,7 +37,7 @@ node*endNode; int main() { - std::ifstream file("testinput2"); + std::ifstream file("input"); while (file.good()){ std::string line; std::getline(file,line); @@ -48,18 +59,18 @@ int main() std::cout<<"================"<0){ + if (x>0&&grid[y][x-1].getElevation()-1<=grid[y][x].getElevation()){ grid[y][x].connections.push_back(&grid[y][x-1]); } - if (x0){ + if (y>0&&grid[y-1][x].getElevation()-1<=grid[y][x].getElevation()){ grid[y][x].connections.push_back(&grid[y-1][x]); } - if (ysearchNodes; searchNodes.push_back(startNode); + startNode->myDist=0.0f; while (searchNodes.size()>0){ node*currentNode=searchNodes.front(); - if (currentNode==startNode){ - currentNode->myDist=pow(currentNode->pos.x-endNode->pos.x,2)+pow(currentNode->pos.y-endNode->pos.y,2); + if (currentNode->visited){ + searchNodes.erase(searchNodes.begin()); + continue; } currentNode->visited=true; - if (currentNode->elevation=='S'){ - currentNode->elevation='a'-1; - } - if (currentNode->elevation=='E'){ - currentNode->elevation='z'+1; - } for (int i=0;iconnections.size();i++){ node*neighbor=currentNode->connections[i]; - if (neighbor==endNode){ - //We can't go any higher. - endNode->parent=currentNode; - break; + if (!neighbor->visited){ + searchNodes.push_back(neighbor); } - if (neighbor->elevation-1<=currentNode->elevation){ - if (neighbor->parent==nullptr||currentNode->myDiststoredDist){ - neighbor->parent=currentNode; - neighbor->storedDist=currentNode->myDist; - neighbor->myDist=pow(neighbor->pos.x-endNode->pos.x,2)+pow(neighbor->pos.y-endNode->pos.y,2); - if (!neighbor->visited){ - searchNodes.push_back(neighbor); - } - } + float lowerGoal=currentNode->myDist+pow(neighbor->pos.x-currentNode->pos.x,2)+pow(neighbor->pos.y-currentNode->pos.y,2); + if (lowerGoalmyDist){ + neighbor->parent=currentNode; + neighbor->myDist=lowerGoal; } } - searchNodes.erase(searchNodes.begin()); } node*searchNode=endNode; diff --git a/sig b/sig index b30e9ff..5cc1e85 100755 --- a/sig +++ b/sig @@ -3,7 +3,7 @@ export AUTO_UPDATE=true source utils/define.sh define PROJECT_NAME "C++ProjectTemplate" -define CUSTOM_PARAMS "-std=c++17 -lX11 -lGL -lpthread -lpng -lstdc++fs -lpulse -lpulse-simple -I/usr/include/lua5.3" +define CUSTOM_PARAMS "-std=c++17 -lX11 -lpthread -lpng -lstdc++fs -I/usr/include/lua5.3" define LANGUAGE "C++" source utils/main.sh