【发布时间】:2019-01-13 20:51:48
【问题描述】:
所以我有一个总是相同维度的矩阵,它的定义如下:
public void InitPositionsGrid()
{
int munberOfRows = 6;
for(int i = 0; i < munberOfRows; i++)
{
if( i % 2 == 0)
{
GridPositions[i] = new int[15];
}
else
{
GridPositions[i] = new int[14];
}
}
}
现在,我需要一种方法(递归或迭代 - 随便什么)来填充这个矩阵,但使用特定的模式,以便它在所有方向上均匀填充。该方法应该采用 3 个参数 X 和 Y 定义起始位置,另一个参数是要填充的位置数。应该看起来像这样:
public void FillGridMatrix(int startingRow, int startingColumn, int numberOfPlacesToFill)
{
//Fill the matrix with the following algorithm but don't go out of bounds
}
这是显示算法示例的图片:
思路是:从当前起始位置开始,勾选“上面”两个空格(应该是x-1,y-1和x-1,y),检查相邻的两个空格(x,y-1和x ,y+1),最后检查“下面”两个空格(x+1,y-1 和 x+1,y)。坐标可能不完全是那些,但这是一般的想法。请注意,当“向上”或“向下”没有更多空间时,要填充的位置应该在左侧和右侧相等。起始行不能是第一行也不能是最后一行。如果当前正在检查的地点已被标记,请跳过该地点。要填充的最大位置数可以是 87,矩阵本身的最大元素数也是如此。第一轮结束后,如果有超过 7 个位置需要填充,则算法从左上角开始,到右下角从起始位置的“相邻”成员结束(本例中为 2 和 7)。
知道什么是最好的解决方案吗?首选 C#。
编辑:这是最接近我想要实现的解决方案,唯一的问题是这不适合递归,并且迭代解决方案需要太多条件。
public int PopulateMatrixAroundCertainPosition(int[][] matrix, int row, int column, int availableNumbers)
{
if(availableNumbers <= 0)
{
return 0;
}
matrix[row][column] = 1;
availableNumbers = PopulateSingleMatrixPosition(matrix, row - 1, column - 1, availableNumbers - 1);
availableNumbers = PopulateSingleMatrixPosition(matrix, row - 1, column, availableNumbers - 1);
availableNumbers = PopulateSingleMatrixPosition(matrix, row, column - 1, availableNumbers - 1);
availableNumbers = PopulateSingleMatrixPosition(matrix, row, column + 1, availableNumbers - 1);
availableNumbers = PopulateSingleMatrixPosition(matrix, row + 1, column - 1, availableNumbers - 1);
availableNumbers = PopulateSingleMatrixPosition(matrix, row + 1, column, availableNumbers - 1);
return availableNumbers - 1;
}
public int PopulateSingleMatrixPosition(int[][] matrix, int row, int column, int availableNumbers)
{
if (availableNumbers <= 0)
{
return 0;
}
if(matrix[row][column] == 1)
{
return availableNumbers + 1;
}
matrix[row][column] = 1;
return availableNumbers;
}
【问题讨论】:
-
请尝试解决它并带着具体问题来到这里。看起来你理解了你写出来的逻辑,所以试着把它转换成代码。否则,您似乎是在要求社区为您编写代码,这不是 SO 的目的。
标签: c# arrays algorithm matrix