Backtracing队列

时间:2016-12-08 17:58:37

标签: c queue

我将游戏板移动到这个队列中,用于停放的汽车"游戏,应该有75个动作来解决这个难题。但是,队列不断溢出,导致移动没有入队,这使得解决方案超过75次移动。注意:无法更改队列大小,它是常量。有什么想法吗?

int enqueue(position* p){
Q[qrear] = p;
qrear = qrear + 1; 
if (qrear == QueueArraySize) {
    qrear = 0;
} 
qsize = qsize + 1;
return 0;
} /*End of insert()*/

position* dequeue(){
if (qsize == 0) {
    printf("Queue Underflow \n");
    return NULL;
}
else {
    position* temp = Q[qfront];
    qfront = qfront + 1; 
    if (qfront == QueueArraySize) {
        qfront = 0;
    }
    qsize = qsize - 1;
    return temp;
}        

}

1 个答案:

答案 0 :(得分:0)

我怀疑你的问题是qsize可能比QueueArraySize大,但队列中的项目数量仅限于QueueArraySize。

入队不能"失败",它总是在队列中放置一个位置,它总是递增队列大小,即使它循环回到Q的开头(它可能会在开头覆盖位置)队列)。

另一件需要考虑的事情是你不注意qrear和qfront之间的关系。想象一下QueueArraySize是10,你排队12个位置,qfront仍然指向Q [0](因为你还没有出现任何东西),但这不是正确的"前面"因为Q [0]和Q [1]被排队的第11和第12位覆盖了队列。在这种情况下,qfront应该是Q [2]。如果你要进入gfront,你应该移动qfront,如果你从qrear出发,你应该移动qrear。