gpt4 book ai didi

c# - 访问二维数组中某个位置的邻居

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:35:43 26 4
gpt4 key购买 nike

我有以下二维数组:

static int[,] arr = new int[5, 5] 
{
{ 00, 00, 00, 01, 00 },
{ 00, 00, 01, 01, 00 },
{ 00, 00, 01, 01, 00 },
{ 00, 00, 01, 01, 00 },
{ 00, 00, 00, 01, 00 },
};

我必须实现一个名为 Hit(int x, int y) 的方法。当我们在数组中命中 0 时(即 Hit(0, 0)、Hit(1, 1),但不是 Hit(3, 0)),我希望所有与我们命中的零相邻的零都增加 10 . 所以如果我调用 Hit(1, 1),数组应该变成下面这样。

static int[,] arr = new int[5, 5] 
{
{ 10, 10, 10, 01, 00 },
{ 10, 10, 01, 01, 00 },
{ 10, 10, 01, 01, 00 },
{ 10, 10, 01, 01, 00 },
{ 10, 10, 10, 01, 00 },
};

知道如何实现吗?在我看来,深度优先搜索/递归排序算法应该可以完成这项工作,但我无法为二维数组实现它。

感谢您的帮助!

最佳答案

您正在寻找的是 Flood fill算法,您可以通过多种方式实现,来自 DFS (观察堆栈)到 BFS .

您也可以稍微精简代码,但这是我(使用 DFS)会做的事情的粗略草图:

int[] dx = { 1, 1, 1, 0, 0, -1, -1, -1 };
int[] dy = { 1, 0, -1, 1, -1, 1, -1, 0 };
void Hit( int x, int y ) {
if ( board[x,y] == 0 ) {
board[x,y] = 10;
for ( int i = 0; i < 8; i++ ) {
nx = x + dx[i];
ny = y + dy[i];

// if nx, ny is in bound
if ( nx >= 0 && nx < height && ny >= 0 && ny < height )
Hit( nx, ny );
}
}
}

关于c# - 访问二维数组中某个位置的邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com