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

📄 operators.java

📁 八数码即九宫图JAVA源代码。希望大家能共享。不是图形样式的
💻 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 + -