漫灌不起作用(c)
我的注水功能不起作用,有点问题。 此赋值的目的是查看数组中是否连接了P和C。 在泛洪填充功能中,它似乎没有将“uu”更改为“P” 样本输入漫灌不起作用(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
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);
...