#include #include #include #include struct vi2d{ int x,y; friend std::ostream&operator<<(std::ostream&out,vi2d&rhs){ out<<"("<connections; int myDist=INFINITY; vi2d pos; node*parent=nullptr; node(char elevation){ this->elevation=elevation; }; char getElevation(){ return elevation=='S'?'a':elevation=='E'?'z'+1:elevation; } }; vi2d playerPos={0,0}; vi2d endingPos={0,0}; std::vector>grid; std::vectorpossibleStartingLocs; node*startNode; node *endNode; int main() { std::ifstream file("input"); while (file.good()){ std::string line; std::getline(file,line); std::vectorrow; if (line.length()>0){ for (int x=0;x0&&grid[y][x-1].getElevation()-1<=grid[y][x].getElevation()){ grid[y][x].connections.push_back(&grid[y][x-1]); } if (x0&&grid[y-1][x].getElevation()-1<=grid[y][x].getElevation()){ grid[y][x].connections.push_back(&grid[y-1][x]); } if (ypos<searchNodes; searchNodes.push_back(testNode); testNode->myDist=0.0f; while (searchNodes.size()>0){ node*currentNode=searchNodes.front(); if (currentNode->visited){ searchNodes.erase(searchNodes.begin()); continue; } currentNode->visited=true; for (int i=0;iconnections.size();i++){ node*neighbor=currentNode->connections[i]; 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; } } } node *searchNode = endNode; bool completed=false; int jumps=0; while (searchNode!=testNode){ if (searchNode->parent!=nullptr){ //std::cout<<"Node goes from "<pos<<" to "<parent->pos<parent; }else{ break; } } if (searchNode==testNode){ if (jumps