gpt4 book ai didi

c - 我陷入了 if top == bottom 和 if bottom == top 的循环

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:06 25 4
gpt4 key购买 nike

我正在编写一个使用二维数组的程序。用户选择一行和一列;如果至少有一个直接与 N S E 或 W 匹配的元素,则它变为 '.'我一直遇到段错误,因为经过各种测试和解决问题后,我相当确定它陷入了 if top == bottom 和 bottom == top(或 left 和 right)的循环中。因为我需要检查所有四个方面,所以我需要同时检查上方和下方。示例:

0 - + + -
1 + + - -
2 - + - -
3 + + + -
4 - - + -
0 1 2 3

如果用户选择 (3,1),所有的 + 都将变为“.”对于如何解决此问题的任何建议,我将不胜感激。此功能的代码如下。谢谢!

extern int bb_pop(BBoardPtr b, int r, int c) {
char bal;
int curr, curc;
curr = r;
curc = c;
if(b->board[curr][curc] == b->board[curr-1][curc] && curr != 0 && b->board[curr-1][curc] != '.') {
curr--;
bb_pop(b, curr, curc);
b->board[curr][curc] = '.';
count++;
curr = r;
curc = c;
}
if(b->board[curr][curc] == b->board[curr][curc-1] && curc !=0 && b->board[curr][curc] != '.') {
curc--;
bb_pop(b, curr, curc);
b->board[curr][curc] = '.';
count++;
curr = r;
curc = c;
}
if(b->board[curr][curc] == b->board[curr+1][curc] && curr < rows-1 && b->board[curr+1][curc] != '.') {
curr++;
bb_pop(b, curr, curc);
b->board[curr][curc] = '.';
count++;
curr = r;
curc = c;
}
if(b->board[curr][curc] == b->board[curr][curc+1] && curc<cols-1 && b->board[curr][curc] != '.') {
curc++;
bb_pop(b, curr, curc);
b->board[curr][curc] = '.';
count++;
curr = r;
curc = c;
}
if(count > 0) {
b->board[r][c] = '.';
}

printf("count %i\n", count); /////////////fix count
return count;
}

最佳答案

在函数的顶部执行此操作:

charToFind = b->board[r][c];
b->board[r][c] = '.';
count = 1;

然后使用charToFind代替board[curr][curc],并移除所有board[curr][curc]='.' 因为你的递归函数会这样做。这应该是您的主体的样子:

if (r != 0 && b->board[r-1][c] == charToFind)
count += bb_pop(b, r-1, c);
if (r < rows-1 && b->board[r+1][c] == charTofind)
count += bb_pop(b, r+1, c);

// Do the same thing for the c-1 and c+1 cases.

需要注意的一件事是,如果您的棋盘很大,您可能会递归到非常深的深度并溢出您的堆栈。

关于c - 我陷入了 if top == bottom 和 if bottom == top 的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954188/

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