⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onestate.java

📁 八数码问题的Java修正版.rar?耸胛侍獾腏ava修正版.rar八数码问题的Java修正版.rar
💻 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 + -