C++ 如何清理这些嵌套的for循环?

C++ 如何清理这些嵌套的for循环?,c++,C++,注意:前面的代码错误。你已经被警告过了 这段代码迭代数独游戏中所有3x3正方形中的所有元素。下面显示的方法是,它获取每个正方形的左上角元素的坐标,然后遍历该正方形中的每个元素。这意味着总共需要4个for循环来访问正确的索引,然后再需要另一个for循环来执行正确的操作 如果放入收回的代码,该代码将正常工作,但它看起来非常凌乱,很难阅读。有没有更好的方法来消除这些嵌套for循环 提前谢谢 void Sudoku::updateSquares(int grid[9][9], int possibleS

注意:前面的代码错误。你已经被警告过了

这段代码迭代数独游戏中所有3x3正方形中的所有元素。下面显示的方法是,它获取每个正方形的左上角元素的坐标,然后遍历该正方形中的每个元素。这意味着总共需要4个for循环来访问正确的索引,然后再需要另一个for循环来执行正确的操作

如果放入收回的代码,该代码将正常工作,但它看起来非常凌乱,很难阅读。有没有更好的方法来消除这些嵌套for循环

提前谢谢

void Sudoku::updateSquares(int grid[9][9], int possibleSolutions[9][9][10])
{
    for (int i = 0; i < 9; i += 3)
    {
        for (int j = 0; j < 9; j += 3)      //for every square:
        {
                            //Other code
                            //...
                            //Other code

            //updates the possibleSolutions array
            for (int k = 0; k < 3; k++)
            {
                for (int l = 0; l < 3; l++)    //for every element in every square:
                {
                    if(grid[i+k][j+l] != 0)
                        continue;
                    for (int n = 0; n < 10; n++)
                    {
                        if(possibleSolutions[i+k][j+l][n] != 0 && numbers[n] == 0)
                        {
                            possibleSolutions[i+k][j+l][n] = 0;
                            possibleSolutions[i+k][j+l][0] -= 1;  //reduce the size, which is held in [][][0]
                        }
                    }
                }
            }

        }
    }
}

您已经实现了一种称为穷举搜索的方法,基本上就是尝试所有可能的正方形组合

你听说过一种叫做“循环展开”的东西吗

->不是5个嵌套For循环,而是多次使用更少的嵌套循环;类似于2个嵌套循环

使用可能在^2上的动态规划方法


我认为这应该是打开的。@Ken如果你这样认为,那么你应该建议在close下移动。你可以用内联函数替换一些内部代码。内联,这样就不会有任何性能损失。@Walter,哪里有一个结束?也许我没有足够的发言权,但我通常看不到。这个问题似乎是离题的,因为它属于电视。