利用电脑玩android版"天天连萌"刷高分 二,利用电脑玩Android版“天天连萌”刷高分(三)...

/**

* 搜索,返回最优点。

*

* @return

*/

public Point search(int x, int y) {

return LianlianKan.twoCornerSearch(imageCodes, x, y);

}

/**

* 连连看搜索算法。

*

* @author Geek_Soledad

*/

public static class LianlianKan {

/**

* 水平搜索

*

* @param datas

*            数组

* @param row

*            对比数值所在的行

* @param col

*            对比数值所在的列

* @param atRow

*            进行水平搜索时所在的行

* @return

*/

private static Point moveHorizon(int[][] datas, int row, int col, int atRow, int atCol) {

// 再拐左

for (int k = atCol - 1; k >= 1; k--) {

if (datas[atRow][k] == datas[row][col]) {

return new Point(atRow, k);

} else if (datas[atRow][k] != 0) {

break;

}

}

// 再拐右

for (int k = atCol + 1; k 

if (datas[atRow][k] == datas[row][col]) {

return new Point(atRow, k);

} else if (datas[atRow][k] != 0) {

break;

}

}

return null;

}

/**

* 竖直搜索

*

* @param datas

*            数组

* @param row

*            对比数值所在的行

* @param col

*            对比数值所在的列

* @param atCol

*            进行水平搜索时所在的列

* @return

*/

private static Point movePortrait(int[][] datas, int row, int col, int atRow, int atCol) {

// 再拐上

for (int k = atCol - 1; k >= 1; k--) {

if (datas[k][atCol] == datas[row][col]) {

return new Point(k, atCol);

} else if (datas[k][atCol] != 0) {

break;

}

}

// 再拐下

for (int k = atCol + 1; k 

if (datas[k][atCol] == datas[row][col]) {

return new Point(k, atCol);

} else if (datas[k][atCol] != 0) {

break;

}

}

return null;

}

/**

* 两个角搜索

*

* @param datas

*            数组

* @param x

*            纵坐标

* @param y

*            横坐标

* @return

*/

public static Point twoCornerSearch(int[][] datas, int x, int y) {

// 向左进行搜索

for (int i = y - 1; i >= 0; i--) {

// 向左进行直线搜索

if (datas[x][i] == datas[x][y]) {

return new Point(x, i);

} else if (datas[x][i] != 0) {

break;

}

// 向左,然后拐上进行直角搜索

for (int j = x - 1; j >= 0; j--) {

if (datas[j][i] == datas[x][y]) {

return new Point(j, i);

} else if (datas[j][i] != 0) {

break;

}

// 向左,拐上,再水平搜索

Point point = moveHorizon(datas, x, y, j, i);

if (point != null) {

return point;

}

}

// 向左,然后拐下进行直角搜索

for (int j = x + 1; j 

if (datas[j][i] == datas[x][y]) {

return new Point(j, i);

} else if (datas[j][i] != 0) {

break;

}

// 向左,拐下,再水平搜索

Point point = moveHorizon(datas, x, y, j, i);

if (point != null) {

return point;

}

}

}

// 横向往右搜索

for (int i = y + 1, length = CODE_COL; i 

// 向右直线搜索

if (datas[x][i] == datas[x][y]) {

return new Point(x, i);

} else if (datas[x][i] != 0) {

break;

}

// 向右,然后拐上进行直角搜索。

for (int j = x - 1; j >= 0; j--) {

if (datas[j][i] == datas[x][y]) {

return new Point(j, i);

} else if (datas[j][i] != 0) {

break;

}

// 向右,拐上,再水平搜索

Point point = moveHorizon(datas, x, y, j, i);

if (point != null) {

return point;

}

}

// 向右,然后拐下进行直角搜索

for (int j = x + 1; j 

if (datas[j][i] == datas[x][y]) {

return new Point(j, i);

} else if (datas[j][i] != 0) {

break;

}

// 向右,拐下,再水平搜索。

Point point = moveHorizon(datas, x, y, j, i);

if (point != null) {

return point;

}

}

}

// 纵向往上搜索

for (int i = x - 1; i >= 0; i--) {

if (datas[i][y] == datas[x][y]) {

return new Point(i, y);

} else if (datas[i][y] != 0) {

break;

}

// 向上,然后拐左进行直角搜索。

for (int j = y - 1; j >= 0; j--) {

if (datas[i][j] == datas[x][y]) {

return new Point(i, j);

} else if (datas[i][j] != 0) {

break;

}

// 向上,拐左,再竖直搜索

Point point = movePortrait(datas, x, y, i, j);

if (point != null) {

return point;

}

}

// 向上,然后拐右进行直角搜索

for (int j = y + 1; j 

if (datas[i][j] == datas[x][y]) {

return new Point(i, j);

} else if (datas[i][j] != 0) {

break;

}

// 向上,拐右,再竖直搜索

Point point = movePortrait(datas, x, y, i, j);

if (point != null) {

return point;

}

}

}

// 纵向往下搜索

for (int i = x + 1, length = CODE_ROW; i 

if (datas[i][y] == datas[x][y]) {

return new Point(i, y);

} else if (datas[i][y] != 0) {

break;

}

// 向下,然后拐左进行直角搜索。

for (int j = y - 1; j >= 0; j--) {

if (datas[i][j] == datas[x][y]) {

return new Point(i, j);

} else if (datas[i][j] != 0) {

break;

}

// 向下,拐右,再竖直搜索

Point point = movePortrait(datas, x, y, i, j);

if (point != null) {

return point;

}

}

// 向下,然后拐右进行直角搜索

for (int j = y + 1; j 

if (datas[i][j] == datas[x][y]) {

return new Point(i, j);

} else if (datas[i][j] != 0) {

break;

}

// 向下,拐右,再竖直搜索

Point point = movePortrait(datas, x, y, i, j);

if (point != null) {

return point;

}

}

}

return null;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值