Musze napisac Algorytm A* i w mam problem żeby wyszukać najmiejszej wartosc f
#include <iostream>
#include <fstream> //wlacza obsluge plikow
#include <vector>
#include <math.h>
using namespace std;
class Punkt
{
public:
int PozycjaX;
int PozycjaY;
int wartosc; // okresla, czy mozna przejsc po polu, 0 - tak, 5 - nie
double G; //długo?ć ?cieżki
double H;
double F;
int RodzicX;
int RodzicY;
};
int main(int argc, char** argv) {
string nazwap = "grid.txt";
int PunktPX = 0;
int PunktPY = 0;
int PunktKX = 19;
int PunktKY = 19;
int wym2=20; // kolumny
int wym1=20; //wiersze
int rows = wym2+1;
// nizej deklaracja tablicy dwuwymiarowej:
Punkt **TablicaP;
// tworzysz tablice o rows (wym2+1 lub jak wolisz y+1) wierszach
TablicaP = new Punkt*[rows];
// teraz dla każdego wiersza dodajesz kolumny (x)
while(rows--) TablicaP[rows] = new Punkt[wym1+1];
// wczesniej mialejs new Punkt, czyli w tabeli masz utworzone Punkty, ale nie maja one zadnych wartosci (masz gole obiekty klasy Punkt)
std::ifstream plik(nazwap.c_str());
for ( int i=1;i<wym2+1;i++)
{
for ( int j=1;j<wym1+1;j++)
{
// z pliku pobierasz wartosc dla danego i,j i zapisujesz ja do obiektu w tablicy ktory jest pod i,j
// tutaj jest 0 (mozna isc) lub 5 (przeszkoda)
plik >> TablicaP[i][j].wartosc;
// przy okazji jak juz idziemy po petlach mozemy podac koordynanty dla danego punktu
TablicaP[i][j].PozycjaX = i;
TablicaP[i][j].PozycjaY = j;
}
}
plik.close();
// teraz masz tablice dwuwymiarowa, wypelniona punktami (obiektami) ktore maja okreslano wartosc, x, y, ale nie maja g,h,f i okreslonego rodzica, ale to wyjdzie pozniej
vector<Punkt*> ListaOtwarta;
vector<Punkt*> ListaZamknieta;
//Dodawanie początkowego wezła
TablicaP[PunktPX][PunktPY].G = 0;
TablicaP[PunktPX][PunktPY].H = sqrt(pow((PunktPX-PunktKX),2)+pow((PunktPY-PunktKY),2));
TablicaP[PunktPX][PunktPY].F = TablicaP[PunktPX][PunktPY].G + TablicaP[PunktPX][PunktPY].H;
ListaOtwarta.push_back(&TablicaP[PunktPX][PunktPY]);
while(!ListaOtwarta.empty())
{
//wybieranie ListyOtwartej pola o najmniejszej wartości F
double MinWartoscF = 0;
int index = 0;
for(vector<Punkt*>::iterator index = ListaOtwarta.begin(); index != ListaOtwarta.end();)
{
//Nie mam pojecia jak wybrac to najmiejsze pole ;/
if(MinWartoscF == (**index).F)
{
}
}
}
//WYSWIETLANIE MAPY
for(int i=1;i<wym2+1;i++)
{
for(int j=1;j<wym1+1;j++)
{
cout<<TablicaP[i][j].wartosc<<" ";
}cout<<"\n\n";
}
// lub bogaciej, zeby sprawdzic czy dobrze zapisalo y i x:
// cout<<"\n\n\n\n\n";
/* for(int i=1;i<wym2+1;i++)
{
for(int j=1;j<wym1+1;j++)
{
if (TablicaP[i][i].PozycjaY< 10)
cout<<" "<<TablicaP[i][j].PozycjaY<<";";
else
cout<<TablicaP[i][j].PozycjaY<<";";
cout<<TablicaP[i][j].PozycjaX<<" "<<TablicaP[i][j].wartosc<<" ";
}cout<<"\n\n";
} */
getchar();
return 0;
}