【问题标题】:Flood Fill and Stack Implementation Not working洪水填充和堆栈实现不起作用
【发布时间】:2015-04-27 17:51:49
【问题描述】:

所以我有两个一起工作的结构。这是一款类似于泡泡爆破游戏的游戏。

当一个气球在网格中弹出时,我想使用填充来移除气球,然后使用堆栈将其放置,以便稍后撤消该过程。

【问题讨论】:

  • 您是在询问撤消堆栈还是洪水填充?你做了哪些尝试?大概您不幸的术语 pop 与气球游戏有关,而不是与堆栈有关。如果是这样,我可以建议在程序内部使用 burst 吗?
  • 我在询问堆栈的洪水填充。此外,由于某种原因,我的洪水填充不起作用。也应该是 balloon_pop
  • 由于 bb_pop 似乎是您的递归函数,您可能也想跳过它。
  • Bb 应该是气球对不起。我编辑了它
  • bb_pop/balloon_pop 返回总分还是其他?

标签: c stack flood-fill


【解决方案1】:

使用预先确定大小的堆栈数组来保持简单。当您想要返回数据时,只需调用 pop_balloon 直到堆栈为空(使用该函数)。

以下代码未经测试,凭空出现,但它应该表明您需要:


Balloon balloonStack[MAX_NUM_BALLOONS_POSSBILE];
int balloonStackIndex = 0;

bool balloonStackIsEmpty()
{
  return balloonStackIndex == 0;
}

void balloonPush(Balloon balloon)
{
  assert(balloonStackIndex &lt MAX_NUM_BALLOONS_POSSBILE);
  balloonStack[balloonStackIndex++] = balloon;
}

Balloon balloonPop()
{
  assert(balloonStackIndex > 0);
  return balloonStack[balloonStackIndex--]
}

int balloon_pop(BBoardPtr b, int r, int c) {

    if(b->board[r][c].color != None /*&& r >= 0 && c >= 0 && r rows && c cols*/) {
        return 0;
    }

    balloonPush(b->board[r][c]);
    b->board[r][c].color = None;
    b->board[r][c].is_popped = 1;
    //...

【讨论】:

  • 我已经有一个 stack.c 程序来处理推送和弹出。我只是不知道为什么我的实际 balloon_pop 算法不起作用。它遵循标准的洪水填充,但我知道我做错了什么
  • 另外,我不知道 assert 是干什么用的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多