Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Heurestyka manhatan

Ostatnio zmodyfikowano 2015-05-06 22:20
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
Heurestyka manhatan
» 2015-05-06 20:22:58
witam próbuję napisać algorytm a* niestety coś zawodzi przy wyznaczaniu H = szacunkowego kosztu ruchu przejścia z aktualnej pozycji do celu wędrówki. Proszę o pomoc,oczywiście sam program nie jest jeszcze skończony. Lepiej to widać po uruchomieniu programu:


C/C++
#include "stdafx.h"
#include <iostream>
#include <list>
#include <cstdlib>
using namespace std;
int const size = 10;
char map[ size ][ size ];

struct node
{
    node( int xx, int yy )
    {
        x = xx;
        y = yy;
        h = 0;
    }
    node()
    {
        h = 0;
    };
    int x, y, h;
    char state;
} start( 0, 0 ), destination( 4, 4 );
node Node[ size ][ size ];

void print()
{
    for( int i = 0; i < size; i++ )
    {
        for( int j = 0; j < size; j++ )
        {
            cout << Node[ i ][ j ].h << " ";
            //cout<<Node[i][j].y;
        }
        cout << endl;
    }
}

void make_heuristics()
{
   
    for( int i = 0; i < size; i++ )
    {
        for( int j = 0; j < size; j++ )
        {
            int x = 0;
           
            Node[ i ][ j ].h = destination.x - Node[ i ][ j ].x;
            if( Node[ i ][ j ].h < 0 )
                 Node[ i ][ j ].h =- Node[ i ][ j ].h;
           
            Node[ i ][ j ].h += destination.y - Node[ i ][ j ].y;
            if( Node[ i ][ j ].h < 0 )
                 Node[ i ][ j ].h =- Node[ i ][ j ].h;
           
        }
       
    }
   
}

void reset()
{
    for( int i = 0; i < size; i++ )
    for( int j = 0; j < size; j++ )
    {
        Node[ i ][ j ].state = '0';
        Node[ i ][ j ].x = j;
        Node[ i ][ j ].y = i;
        Node[ i ][ j ].h = 0;
    }
    for( int j = 2; j < 7; j++ )
         Node[ j ][ 5 ].state = 'x';
   
    Node[ destination.x ][ destination.y ].state = 257;
   
    make_heuristics();
}




int _tmain( int argc, _TCHAR * argv[] )
{
   
   
    bool int_exit = 1;
    reset();
   
    while( int_exit != 0 )
    {
        system( "CLS" );
       
        print();
        cout << "Podaj punkt startu" << endl;
        cout << "x =" << endl;
        cin >> start.x;
        cout << "y =" << endl;
    }
    system( "PAUSE" );
    return 0;
}
P-131823
aaadam
Temat założony przez niniejszego użytkownika
» 2015-05-06 22:20:50
problem rozwiązany czasami trywialne sprawy zajmują tyle czasu ;/
P-131833
« 1 »
  Strona 1 z 1