c++ - 战舰概率网格

标签 c++ arrays nested-loops

我正在尝试为我的战舰程序创建一个函数,以创建一个概率网格,其中包含任何剩余部分可能位于的所有位置。我希望网格遍历整个数组,然后检查是否在那个位置点对象有空间放置(水平或垂直)并在它将覆盖的每个点上加一个,向我显示哪个坐标最有可能在其上放置一艘船。 BS_GRID_ROWS 和 BS_GRID_COLS 这两个值都保存了战舰板的大小,矩阵是我想显示我的概率值的数组,而 hits 是一个数组,如果一艘船被击中,它的数字(对应于每艘船)大于零,- 1 如果我射门但没打中,如果在那个坐标没有射门则为零。这是我到目前为止的代码。它正在工作但不正确,它完全错过了最后的几个方 block ,我知道在放置任何船只之前运行它时我知道这是不可能的。任何帮助,将不胜感激。谢谢

void
probabilityGrid(int matrix[BS_GRID_ROWS][BS_GRID_COLS], int hits[BS_GRID_ROWS][BS_GRID_COLS], int shipSize)
{
    bool isValid=true;

   for (int row = 0; row< BS_GRID_ROWS; row++)
   {
       for (int col = 0; (col+shipSize) <BS_GRID_COLS; col++)
       {
           for (int hold = col; hold < shipSize; hold++)
           {
               if (hits[row][hold]!=0)
                isValid=false;
           }
           if (isValid)
           {
               for (int hold = col; hold < shipSize; hold++)
               {
                  matrix[row][hold]++;
               }

           }
           isValid=true;
        }
    }
    //For now I'm just working on the horizontal part of the algorithm.
}

最佳答案

想象一下(或更好地设置并通过调试器运行)BS_GRID_ROWS == 1 , BS_GRID_COLS == 1 , 和 shipSize == 1 .

发生的情况是条件 (col+shipSize) <BS_GRID_COLSfalse即使col == 0这可能不是您想要的,您应该将其更改为 col + shipSize <= BS_GRID_COLS .

出于同样的原因,你应该改变row<=BS_GRID_ROWS-shipSize-1row + shipSize <= BS_GRID_ROWS .

关于c++ - 战舰概率网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834879/

相关文章:

python - Python 中 ND 数组的“删除”命令

c++ - c++语言中的 block 作用域解析

c# - 如何找到无法加载 "A procedure imported by ' xxx.dll 的源。”异常?

c++ - 何时为多态类初始化 vptr(指向 vtable)?

c - 简化 C 中的嵌套 for 循环

postgresql - postgresql 中的嵌套循环问题

C++ 我可以用 1 个循环替换嵌套循环吗

c++ - 在 C++ 中将 double 转换为 (IEEE 754) 64 位二进制字符串表示形式

c++ - 检查字符串是否与字符串数组中的任何字符串匹配?

arrays - bash 和 for 循环中的关联数组