0

我在运行以下代码时遇到了无限循环。在一个被块包围的网格内,一个预定义的正方形开始于此实现运行。如果需要访问一个正方形,则将其标记为 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++;
            }
        }
    }
}
4

1 回答 1

0

我在随机数据上运行了您的代码(边缘为“X”)。我没有遇到任何循环。

您也没有理由遇到问题。在每次迭代中检查每个像素,并保证所有的“1”都被更改为“2”。没有退路,不可能循环。

也许您可以提供有关程序行为的更多信息。

顺便说一句:您的代码中有一个小怪癖。由于您在循环期间已经在编写地图,因此洪水会快速填充到底部和右侧(难以解释 -> 示例)

  • 循环开始:一切都是 ' ' 除了 create[2][2]=='1'
  • 检查所有元素直到创建[2][2],将“1”写入邻居,将“2”写入自身
  • 检查下一个元素,即创建[2][3],它也是'1'并填充邻居
  • 等等

因此,在第一个周期之后,您只会期望创建 [2][2]=='2',但它右侧和下方的所有内容也是 =='2'。

目前它不会破坏您的代码,但如果您更改某些内容,它可能会导致意外结果。

于 2012-06-12T08:33:54.587 回答