【问题标题】:Battleship Probability Grid战舰概率网格
【发布时间】:2015-04-23 21:44:10
【问题描述】:

我正在尝试为我的战舰程序创建一个函数,以创建一个概率网格,其中包含任何剩余部分可能位于的所有位置。我希望网格循环遍历整个数组,然后检查是否在那个位置点对象有空间放置(水平或垂直),并在它将覆盖的每个点上添加一个,向我显示哪些坐标最有可能在其上放置一艘船。 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.
}

【问题讨论】:

  • 如果您提供更多关于您遇到的问题的详细信息,并尽可能提供示例,您更有可能获得帮助。
  • 现在我只是想用 X 为一个不为零的点计算一张网格的图片,用 0 表示一个为零的点,只是为了调试,它没有命中几个数组底部的正方形。它在右上角少了一堆,我知道如果还没有任何船,它应该至少击中每个方格一次。我的循环一定有问题。我无法在此处发布数组示例,但右下角缺少大约六个。

标签: c++ arrays nested-loops


【解决方案1】:

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

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

出于同样的原因,您应该将row&lt;=BS_GRID_ROWS-shipSize-1 更改为row + shipSize &lt;= BS_GRID_ROWS

【讨论】:

  • 这绝对是对的,但我试过了,还是有问题。它不只是跳过底部的方块,还有一些被方块包围的方块,所以我不认为它是一个边界。
  • @GareyFleeman 那么你应该提供一个MCVE 与常量和参数的具体值。你得到什么,结果应该是什么。见How do I ask a good question?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多