📄 operators.java
字号:
package exercise0;
//定义操作集类
public class Operators {
// 确定零点位置
int localize(OneState x) {
for (int i = 0; i < x.m; i++)
for (int j = 0; j < x.n; j++)
if (x.stateArray[i][j] == 0)
return i * x.n + j;
return -1;
}
/*
* boolean canMoveLeft(OneState x) { int m = localize(x) / x.n; int n =
* localize(x) % x.n; if (0 < n && n < x.n) return true; return false; }
*
* boolean canMoveRight(OneState x) { int m = localize(x) / x.n; int n =
* localize(x) % x.n; if (0 <= n && n < x.n - 1) return true; return false;
* }
*
* boolean canMoveUp(OneState x) { int m = localize(x) / x.n; int n =
* localize(x) % x.n; if (0 < m && m < x.m) return true; return false; }
*
* boolean canMoveDown(OneState x) { int m = localize(x) / x.n; int n =
* localize(x) % x.n; if (0 <= m && m < x.m - 1) return true; return false;
* }
*/
// 定义左移操作
public boolean moveLeft(OneState x) {
int m = localize(x) / x.n;
int n = localize(x) % x.n;
if (0 < n && n < x.n) {
x.stateArray[m][n] = x.stateArray[m][n - 1];
x.stateArray[m][n - 1] = 0;
// x.operator=EnumDemo.operator.LEFT;
x.setOperate(operator.LEFT);
return true;
}
return false;
}
// 定义右移操作
public boolean moveRight(OneState x) {
int m = localize(x) / x.n;
int n = localize(x) % x.n;
if (0 <= n && n < x.n - 1) {
x.stateArray[m][n] = x.stateArray[m][n + 1];
x.stateArray[m][n + 1] = 0;
// x.operator=EnumDemo.operator.RIGHT;
x.setOperate(operator.RIGHT);
return true;
}
return false;
}
// 定义上移操作
public boolean moveUp(OneState x) {
int m = localize(x) / x.n;
int n = localize(x) % x.n;
if (0 < m && m < x.m) {
x.stateArray[m][n] = x.stateArray[m - 1][n];
x.stateArray[m - 1][n] = 0;
// x.operator=EnumDemo.operator.UP;
x.setOperate(operator.UP);
return true;
}
return false;
}
// 定义下移操作
public boolean moveDown(OneState x) {
int m = localize(x) / x.n;
int n = localize(x) % x.n;
if (0 <= m && m < x.m - 1) {
x.stateArray[m][n] = x.stateArray[m + 1][n];
x.stateArray[m + 1][n] = 0;
// x.operator=EnumDemo.operator.DOWN;
x.setOperate(operator.DOWN);
return true;
}
return false;
}
//状态比较
public boolean stateCompare(OneState x, OneState y) {
if (x.m != y.m || x.n != y.n)
return false;
for (int i = 0; i < x.m; i++)
for (int j = 0; j < x.n; j++)
if (x.stateArray[i][j] != y.stateArray[i][j])
return false;
return true;
}
//检查某一状态是否已在表中
public boolean notContain(OneState x, OneState[] g, int n) {
for (int i = 1; i <= n; i++)
if (stateCompare(x, g[i]))
return false;
return true;
}
//求取状态的逆序数
private boolean Order(OneState x) {
int sun = 0;
for (int i = 0; i < x.m * x.n - 1; i++) {
for (int j = 0; j < x.m * x.n; j++) {
if (x.stateArray[j / x.n][j % x.n] != 0) {
if (x.stateArray[j / x.n][j % x.n] == i + 1)
break;
if (x.stateArray[j / x.n][j % x.n] < i + 1)
sun++;
}
}
}
if (sun % 2 == 0)
return true;
else
return false;
}
//确定两状态是否可达
public boolean isRightOrder(OneState x, OneState y) {
if (Order(x) != Order(y))
return false;
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -