Mappatura dei punti ai quadrati

3

Sto lavorando alla scrittura di un codice per l'algoritmo di Hilbert per risolvere un Problema dei venditori ambulanti . Sebbene esistano diversi metodi efficaci, sono semplicemente curioso di implementare la curva di riempimento Hilbert Space .

  1. Per prima cosa creiamo una curva di Hilbert e dividiamo l'intera area in un numero di quadrati.

  2. Quindi, usando la sequenza dei quadrati, colleghiamo tutti i punti attraverso i quali i venditori devono viaggiare.

Il mio problema è nella seconda parte. Come posso trovare i quadrati che contengono un punto? O come posso trovare i quadrati vuoti?

    
posta jhon_wick 20.01.2017 - 16:02
fonte

1 risposta

1

Per trovare i quadrati che contengono un punto , il dominio di ricerca, cioè una raccolta di punti, concettualmente deve contenere attributi recuperabili, come il numero di punti, se un punto deve essere visitato e anche l'ordine in cui un punto verrà visitato. Un array di una semplice struttura viene in mente come un'implementazione che potrebbe essere utilizzata per modellare un dominio di questo tipo.

in C per esempio:

typedef struct {
    int x;  //x position in domain
    int y;  //y position in domain
}P; //point

typedef struct {
    P p;
    BOOL occupied; //1 = will be visited, 0 = will NOT be visited
    int sequence;  //0 if not visited, 1-n indicated order of visit.
}DOMAIN;  // example points: {{0, 0}, 1, 1}, {{0, 1}, 0, 0} 
          // meaning:      The point at position 0,0 will be visited first
          //               The point at position 0,1 will not be visited.

//Model of some existing domain using the DOMAIN struct.   
//This one is comprised of 25 points, arranged in 5x5 square,     
//but if a domain of different dimensions is required, (and can   
//be represented in this fashion) modify these initializers to   
//meet those needs:  

DOMAIN domain[] = {{{0,0},1,1},{{0,1},0,-1},{{0,2},0,-1},{{0,3},0,-1},{{0,4},0,-1},
                   {{1,0},0,-1},{{1,1},0,-1},{{1,2},0,-1},{{1,3},0,-1},{{1,4},0,-1},
                   {{2,0},0,-1},{{2,1},1,2},{{2,2},0,-1},{{2,3},0,-1},{{2,4},0,-1},
                   {{3,0},0,-1},{{3,1},0,-1},{{3,2},0,-1},{{3,3},1,3},{{3,4},0,-1},
                   {{4,0},0,-1},{{4,1},1,4},{{4,2},0,-1},{{4,3},0,-1},{{4,4},1,5} };


int main(void)
{   //Get the total number of points existing in domain:
    int pointCount = sizeof(domain)/sizeof(domain[0]);
    int i;

    for(i=0;i<pointCount;i++)
    {   //determine point by point which are to be occupied...
        if(domain[i].occupied == TRUE)
        {   //For any point to be occupied, indicate its location
            //and in what order (sequence) it will be occupied.  
            printf("point[%d,%d] is occupied with sequence %d\n", domain[i].p.x,domain[i].p.y, domain[i].sequence);
        }
    }
    return 0;
}

I risultati di questo dominio, con i punti che saranno occupati e l'ordine di occupazione:

    
risposta data 20.01.2017 - 18:11
fonte

Leggi altre domande sui tag