可以使用什么算法从二维阵列中的位置移动

时间:2016-06-01 12:55:05

标签: algorithm data-structures

从昨晚开始,我一直在使用C中的二维数组并在我的矩阵NxN中获得随机位置(x)和(y),并且我已经赋值'1'(矩阵[x] [y ] = 1)。

事实证明,我所有单元格中的矩阵包含数字'0'和几个'1'。但是在随机位置之后产生了“1”(我已经开发了这个)。

Initial matrix

然后你需要一些想法或算法,对于该随机起始位置来填充矩阵中具有'0'的所有其他单元格。我知道我必须在邻接矩阵单元格1到1内的8个方向上移动。

Directions

我有一个理论可以解决它,但如果它是正确的,我会解释:

如果我的位置是随机的(x,y),那么要进行的动作是:

右(x,y + 1)。

向上(x-1,y)

右上角(x-1,y-1)。

..等等..

假设这是正确的,那么整个矩阵就可以这样,并且'0'的位置是'1'?但是迭代或递归算法对我有用吗?

问候

1 个答案:

答案 0 :(得分:0)

我做了一些安排并且有效。有人认为你可以改进吗?

void floodFillUtil(int screen[][N], int x, int y, int prevC, int newC, bool ini)
{
    if (x < 0 || x >= M || y < 0 || y >= N)
        return;                   

    if ( (screen[x][y] == newC  &&  prevC != newC) || (screen[x][y]== prevC && !ini ) )               
        return;        

    if( screen[x][y] != prevC )
         screen[x][y] = newC;

    floodFillUtil(screen, x+1, y, prevC, newC, false);
    floodFillUtil(screen, x-1, y, prevC, newC, false);
    floodFillUtil(screen, x, y+1, prevC, newC, false);
    floodFillUtil(screen, x, y-1, prevC, newC, false);    

    floodFillUtil(screen, x-1, y+1, prevC, newC, false);
    floodFillUtil(screen, x-1, y-1, prevC, newC, false);
    floodFillUtil(screen, x+1, y-1, prevC, newC, false);
    floodFillUtil(screen, x+1, y+1, prevC, newC, false);
}

感谢所有