Это часть моей домашней работы, которая заключается в поиске кратчайшего пути между двумя точками на графике x, y (размер графика 640 * 340.). ПУТЬ ДОЛЖЕН ИДЕТ ТОЛЬКО ЧЕРЕЗ ТОЧКИ, В КОТОРЫХ (X, Y) ЗНАЧЕНИЯ ЦЕЛИ. Я новичок в C ++, но учитель сказал нам, что у нас есть код на C ++. Мой код выглядит следующим образом:
#include <iostream>
#include <unordered_map>
#include <utility>
#include <array>
#include <cmath>
using namespace std;
class nodePoint {
public:
int x;
int y; // the x, y cordinates of each point
nodePoint * prevPostion; // a pointer towards the previous point in the path leading to it.
int distance; // how many "points" away from the starting point.
};void findshortest (nodePoint start,nodePoint end){
for (int i=-1; i<2; i++) {
for (int j=-1; j<2; j++) {
nodePoint *nextNode=new nodePoint();
nextNode->x=start.x+i;
nextNode->y=start.y+i;// iterate all the neighboring points of the point.
if (nextNode->x <= 640 && nextNode->y <=360 && nextNode->x >=0 &&nextNode->y>=0 )// check to see if the point is out of the bound
{
if (nextNode->x==end.x && nextNode->y==end.y) // the point is the ending points.
{
if (end.distance>start.distance+1) {
end.prevPostion=&start;
end.distance=start.distance+1;
}
}else{
findshortest(*nextNode, end);
}
}
}
}
}int main()
{
nodePoint *one=new nodePoint();// "one" is the starting point
one->x=1;
one->y=2; //just for testing.
one->distance=0;
nodePoint *two=new nodePoint();// "two" is the end point
two->x=3;
two->y=4; // just for testing.
two->distance=pow(two->distance, 10);//set the initial distance value of the end point. It should be a very big number, so that it will be replaced later.
findshortest(*one, *two); //look for the shortest path using the function we just defined.
nodePoint *printer=new nodePoint(); // set a node to iterate over the shortest path through the previous node.
printer=two;
while (two->prevPostion!=NULL) {
printf("%d,%d",printer->x,printer->y); // print out the (x,y) value of each of the point on the path.
printer=two->prevPostion;
}
return 0;
}
Я действительно не понимаю, что вы пытаетесь сделать здесь, но я знаю, что вы должны использовать числа с плавающей запятой или двойные вместо целых, если вы хотите получить десятичный ответ.
Кстати, разве не самое короткое прошлое — это теорема Пифагора?
Кратчайший путь для точек (Ax, Ay) и (Bx, By) должен быть sqrt ((Bx-Ax) ^ 2 + (By-Ay) ^ 2)
Других решений пока нет …