从昨晚开始,我一直在使用C中的二维数组并在我的矩阵NxN中获得随机位置(x)和(y),并且我已经赋值'1'(矩阵[x] [y ] = 1)。
事实证明,我所有单元格中的矩阵包含数字'0'和几个'1'。但是在随机位置之后产生了“1”(我已经开发了这个)。
然后你需要一些想法或算法,对于该随机起始位置来填充矩阵中具有'0'的所有其他单元格。我知道我必须在邻接矩阵单元格1到1内的8个方向上移动。
我有一个理论可以解决它,但如果它是正确的,我会解释:
如果我的位置是随机的(x,y),那么要进行的动作是:
右(x,y + 1)。
向上(x-1,y)
右上角(x-1,y-1)。
..等等..
假设这是正确的,那么整个矩阵就可以这样,并且'0'的位置是'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);
}
感谢所有