我正在尝试为我的战舰程序创建一个函数,以创建一个剩余所有零件可能位于的所有位置的概率网格。我希望该网格遍历整个数组,然后检查此时是否存在物体有放置空间(水平或垂直),并在要覆盖的每个点上添加一个,向我显示哪些坐标最有可能在其上放船。 BS_GRID_ROWS和BS_GRID_COLS这两个值均保持战舰板的大小,矩阵是我想显示我的概率值的数组,而hits是一个数组(如果命中了某艘船,其数字(对应于每艘船)大于零)-如果我开枪而错过,则为1;如果在该坐标处未射击,则为0。这是我到目前为止的代码。它正在工作,但无法正确完成,它完全遗漏了几个正方形,我知道在放置任何船只之前运行它时,这是不可能的。任何帮助,将不胜感激。谢谢

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 == 1BS_GRID_COLS == 1shipSize == 1

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

出于相同的原因,您应该将row<=BS_GRID_ROWS-shipSize-1更改为row + shipSize <= BS_GRID_ROWS

09-07 06:43