📄 onestate.java
字号:
package exercise0;
//定义状态结点
public class OneState {
private int id =1;// 状态编号
private int layer = 1;// 所在层数
private int parent = 0; // 父结点编号
private int estimate = 65535; // 启发权值
public int[][] stateArray; // 状态数组
private operator operate = operator.ROOT;// 父节点执行的操作
public int m, n;// 数组行列数
public OneState() {
}
public OneState(int[][] array) {
m = array.length;
n = array[1].length;
stateArray = new int[m][n];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
stateArray[i][j] = array[i][j];
}
public OneState(OneState x) {
m = x.m;
n = x.n;
id = x.id;
layer = x.layer;
operate = x.operate;
parent = x.parent;
estimate = x.estimate;
stateArray = new int[m][n];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
this.stateArray[i][j] = x.stateArray[i][j];
}
public void setId(int n) {
id = n;
}
public int getId() {
return id;
}
public void setParent(int n) {
parent = n;
}
public int getParent() {
return parent;
}
public void setLayer(int n) {
layer = n;
}
public int getLayer() {
return layer;
}
public void setOperate(operator x) {
operate = x;
}
public operator getOperate() {
return operate;
}
// 用启发式函数设置启发权值
public void setEstimate(OneState y) {
estimate = 0;
if (m != y.m || n != y.n)
estimate = 65535;
else
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (stateArray[i][j] != y.stateArray[i][j])
estimate++;
estimate += layer;
}
public int getEstimate() {
return estimate;
}
public void display() {
String str;
str = "编号为" + this.id + "的结点位于第" + this.layer;
if (this.parent == 0)
str += "层,它为初始结点";
else
str += "层,它由编号为" + this.parent + "的结点通过Move" + this.operate + "得到";
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++) {
if (j % n == 0)
str += "\n";
str += " \t" + stateArray[i][j];
}
System.out.println(str);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -