在运行下面的代码时,我遇到了一个无限循环。在一个被块包围的网格中,一个预定义的方块开始于这个实现运行的方块。如果需要访问一个正方形,则将其标记为1;如果已访问过正方形,则将其标记为2。我似乎找不到解决方案,我希望得到一些有用的提示。
one_count=1;
while(one_count>0){
for(int i=0;i<24;i++){
for(int c=0;c<80;c++){
if(create[i][c]=='1'){
if(create[i-1][c]==' '){
create[i-1][c]='1';
}
if(create[i+1][c]==' '){
create[i+1][c]='1';
}
if(create[i][c-1]==' '){
create[i][c-1]='1';
}
if(create[i][c+1]==' '){
create[i][c+1]='1';
}
create[i][c]='2';
}
}
}
one_count=0;
for(int i=0;i<24;i++){
for(int c=0;c<80;c++){
if(create[i][c]=='1'){
one_count++;
}
}
}
}发布于 2012-06-12 16:33:55
我在随机数据上运行了你的代码(边是'X')。我没有遇到任何循环。
而且,你也没有理由会遇到问题。每一个像素在每次迭代中都会被检查,并且保证所有的‘1’都会变成‘2’。没有退路,也不可能循环。
也许你可以提供更多关于程序行为的信息。
BTW:在您的代码中有一个小问题。洪水向底部和右侧快速填充,因为您已经在周期中编写地图(很难解释->示例)。
循环开始:除了create2=='1'
所以在第一个循环之后,你可能只期望create2=='2‘,但是它右边和下面的东西也是=='2’。
它目前不会破坏你的代码,但如果你改变了一些东西,它可能会导致意想不到的结果。
https://stackoverflow.com/questions/10989509
复制相似问题