漫灌不起作用(c)

漫灌不起作用(c),c,flood-fill,C,Flood Fill,我的注水功能不起作用,有点问题。 此赋值的目的是查看数组中是否连接了P和C。 在泛洪填充功能中,它似乎没有将“uu”更改为“P” 样本输入 5 1 2 PC 2 1 P C 2 2 P# #C 2 2 P_ C_ 8 7 __P____ ####_## _____#_ _____#C ##_###_ _____#_ ___#_#_ ___#___ 5 7 __P____ ####_## _____#_ _____#C ##_###_ 代码 #包括 #定义MAXC 10 #定义MAXR 10

我的注水功能不起作用,有点问题。 此赋值的目的是查看数组中是否连接了P和C。 在泛洪填充功能中,它似乎没有将“uu”更改为“P”

样本输入

5 
1 2
PC
2 1
P
C
2 2
P#
#C
2 2
P_
C_
8 7
__P____
####_##
_____#_
_____#C
##_###_
_____#_
___#_#_
___#___
5 7
__P____
####_##
_____#_
_____#C
##_###_
代码

#包括
#定义MAXC 10
#定义MAXR 10
空洞泛洪填充(字符映射[][MAXC+1],整数i,整数j,整数r,整数c);
int checklocation(字符映射[][MAXC+1],int i,int j,int r,int c);
int main(){
文件*ifp=fopen(“bunnies.in”,“r”);
int numcases,loop;
fscanf(ifp、%d、&numcase);
对于(loop=0;loop=0&&i=0&&j
您的
floodfill()
似乎已损坏:

当您在
p
的位置调用它时,以下检查

if (map[i][j] != '_')
    return;
将立即返回而不做任何操作(因为
map[i][j]
p
那里,而不是
\u

尝试:

这将改变当前位置,仅在需要时调用周围的洪水填充

请注意,这仍然会跳过初始p,您可以在从
main()调用
floodfill()
之前,通过将
map[i][j]
设置为
\u
来修复初始p

此外,您似乎从输入中读取了太多内容:

map[i][j] = fgetc(ifp);
for (j=0; j<c; j++) {
  map[i][j] = fgetc(ifp);
  ...
map[i][j]=fgetc(ifp);

对于(j=0;jj),如果您自己弄清楚发生了什么,您将学到更多。要做到这一点,请添加printf(),以便在重要位置(例如每个函数调用的参数)生成跟踪输出。更好的是,学习如何使用调试器。一个问题是:在
checklocation
中,if语句没有意义。用
i=j=0;
在心里跟踪代码,看看会发生什么。但是map[i][j]在调用泛洪填充函数时的初始值是P,因此它永远不会启动if(“”)那就是我要说的stuck@user1451642-正确。在从
main()
函数调用
floodfill()
之前,将
map[i][j]
设置为
'
,确定我的读取输入为
(i=0;i@user1451642-您的问题现在解决了吗,还是仍然存在问题?@user1451642-如果您仍然存在问题,下面是一个工作示例:。请注意,我已将文件读取调用更改为stdin读取调用。
if (map[i][j] == '_') {
  map[i][j] = 'P';

  floodfill(map, r, c, i, j+1); //check right
  floodfill(map, r, c, i, j-1); //check left
  floodfill(map, r, c, i+1, j); //check below
  floodfill(map, r, c, i-1, j); //check above
}
map[i][j] = fgetc(ifp);
for (j=0; j<c; j++) {
  map[i][j] = fgetc(ifp);
  ...