Android-矩阵中判断相邻值相等
请问在7*8的矩阵中怎么找出相邻的值相同的个数超过3个的情况呢 比如图中的 1 1 1 1 1 1 和 5 5 5 5 5 和 3 3 3 呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
请问在7*8的矩阵中怎么找出相邻的值相同的个数超过3个的情况呢 比如图中的 1 1 1 1 1 1 和 5 5 5 5 5 和 3 3 3 呢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
当作一个图,相邻且相同的格子看作是临接的,然后进行dfs搜索,连通分量中节点数目超过3个的即为所求,时间复杂度O(n * m)。
public void judge(ColorButton button, ColorButton[][] buttons) {
int posx = (int) button.getPos().x;
int posy = (int) button.getPos().y;
int state = button.getState();
boolean[][] check = new boolean[colls][rows];
ArrayList<ColorButton> colorButtons = new ArrayList<ColorButton>();
check(posx, posy, state, check, buttons);
for (int i = 0; i < colls; i++) {
for (int j = 0; j < rows; j++) {
if (check[i][j]) {
Gdx.app.log("debug", "get x=" + i + " y=" + j);
colorButtons.add(buttons[i][j]);
}
}
}
checkCompleted.onCompleted(colorButtons, button);
}
public ArrayList<ColorButton> checkHasOne(ColorButton[][] buttons)
{
for (int i = 0; i < colls; i++) {
for (int j = 0; j < rows; j++) {
int posx = (int) buttons[i][j].getPos().x;
int posy = (int) buttons[i][j].getPos().y;
int state = buttons[i][j].getState();
boolean[][] check = new boolean[colls][rows];
ArrayList<ColorButton> colorButtons = new ArrayList<ColorButton>();
check(posx, posy, state, check, buttons);
for (int i1 = 0; i1 < colls; i1++) {
for (int j1 = 0; j1 < rows; j1++) {
if (check[i1][j1]) {
Gdx.app.log("debug", "get x=" + i1 + " y=" + j1);
colorButtons.add(buttons[i1][j1]);
}
}
}
if (colorButtons.size() >= 3) {
return colorButtons;
}
}
}
return null;
}
public void check(int i, int j, int state, boolean[][] checkable,
ColorButton[][] data) {
// 上
if (j + 1 < rows) {
if (checkable[i][j + 1] == false) {
if (data[i][j + 1].getState() == state) {
checkable[i][j + 1] = true;
check(i, j + 1, state, checkable, data);
} else {
checkable[i][j + 1] = false;
}
}
}
// 下
if (j - 1 >= 0) {
if (checkable[i][j - 1] == false) {
if (data[i][j - 1].getState() == state) {
checkable[i][j - 1] = true;
check(i, j - 1, state, checkable, data);
} else {
checkable[i][j - 1] = false;
}
}
}
// 左
if (i - 1 >= 0) {
if (checkable[i - 1][j] == false) {
if (data[i - 1][j].getState() == state) {
checkable[i - 1][j] = true;
check(i - 1, j, state, checkable, data);
} else {
checkable[i - 1][j] = false;
}
}
}
// 右
if (i + 1 < colls) {
if (checkable[i + 1][j] == false) {
if (data[i + 1][j].getState() == state) {
checkable[i + 1][j] = true;
check(i + 1, j, state, checkable, data);
} else {
checkable[i + 1][j] = false;
}
}
}
}
}