示例#1
0
void AddOpen(PathFinder* pf, int x, int y, Node* parent)
{
    if (x < 0 || x >= pf->map->width)
        return;
    if (y < 0 || y >= pf->map->height)
        return;

    // Ignore if the node isn't walkable
    if (GetTile(pf->map, x, y) == Wall)
        return;

    // Ignore if the node has already been checked before.
    if (pf->nodeMap[x][y].open == OnClosedList)
        return;

    if (pf->nodeMap[x][y].open == NoList)
    {
        pf->nodeMap[x][y].parent = parent;

        pf->nodeMap[x][y].g = ComputeG(pf, x, y, parent);
        pf->nodeMap[x][y].h = ComputeH(pf, x, y);
        pf->nodeMap[x][y].f = ComputeF(pf, x, y);

        pf->nodeMap[x][y].open = OnOpenList;
        QueueAdd(pf->openList, &pf->nodeMap[x][y]);
    }
    else if (pf->nodeMap[x][y].open == OnOpenList)
    {
        int g = ComputeG(pf, x, y, parent);

        // If this path we're currently searching is better, use it instead
        if (pf->nodeMap[x][y].g > g)
        {
            pf->nodeMap[x][y].parent = parent;

            pf->nodeMap[x][y].g = ComputeG(pf, x, y, parent);
            pf->nodeMap[x][y].h = ComputeH(pf, x, y);
            pf->nodeMap[x][y].f = ComputeF(pf, x, y);

            int index = QueueSearch(pf->openList, &pf->nodeMap[x][y]);
            PercolateUp(pf->openList, index, &pf->nodeMap[x][y]);
        }
    }
}
示例#2
0
文件: main.c 项目: MohamedFawzy/CALG
int main(int argc, const char * argv[]) {
    int x,choice;
    struct CircularQueue cq;
        cq.front = CRICULARQUEUESIZE-1;
        cq.rear = CRICULARQUEUESIZE-1;
    
    do{
        menu();
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                printf("Enter elements to enqueue\n");
                scanf("%d", &x);
                enqueue(&cq, x);
                break;
            case 2:
                x = dequeue(&cq);
                printf("\n%d is dequeue\n",x);
                break;
            case 3:
                display(&cq);
                break;
            case 4:
                clearQ(&cq);
                break;
            case 5:
                printf("Enter element you need to search for \n");
                scanf("%d",&x);
                int pos = QueueSearch(&cq, x);
                printf("The key element %d found at index %d\n", x, pos);
                break;
            default:
                printf("\nWrong entry, Try again !\n");
                break;
        }
    }while (choice != 6);
    return 0;
}