gpt4 book ai didi

c - 回溯队列

转载 作者:行者123 更新时间:2023-11-30 16:53:03 28 4
gpt4 key购买 nike

我将游戏板移动放入此队列中,用于“停放的汽车”游戏,它应该有 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;
}

}

最佳答案

我怀疑您的问题是 qsize 可以变得大于 QueueArraySize,但队列中的项目数仅限于 QueueArraySize。

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

另外一个需要考虑的事情是你没有关注qrear和qfront之间的关系。想象一下 QueueArraySize 是 10,并且您入队 12 个位置,qfront 仍将指向 Q[0](因为您尚未出列任何内容),但这不是队列的正确“前端”,因为 Q[0] 和Q[1] 已被您入队的第 11 个和第 12 个位置覆盖。在这种情况下,qfront 应该是 Q[2]。如果要入队到 gfront,则应移动 qfront;如果要从 qrear 出队,则应移动 qrear。

关于c - 回溯队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41045885/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com