Java八数码(图形界面)

最近学习了Java图形界面的编程,写一个八数码bfs的代码,和大家分享一下。

同时这份代码也是我的期末大作业。

逻辑层

package com.EightNumber.view;
import java.util.*;

public class EightNumPath {
	final static int dx[] = {-1, 1, 0, 0};
	final static int dy[] = { 0, 0,-1, 1};
	final static String dir = "UDLR";
	static int maxstate = 400000;
	static int [][]st = new int[maxstate][9];
	static int []goal = {1,2,3,4,5,6,7,8,0};
	static int []dist = new int[maxstate];
	static int []fa = new int[maxstate];
	static int []move = new int[maxstate];
	static boolean []vis = new boolean[maxstate];
	static int []fact = new int[9];
	static StringBuffer path;
	public static boolean isok(int []a) {
	    int sum=0;
	    for(int i=0; i < 9; i++)  
	        for(int j=i+1; j < 9; j++)  
	            if(a[j] != 0 && a[i] != 0 && a[i] > a[j])  
	                sum++;
	    if(sum % 2 == 0) {
	    	return true;
	    }
	    return false;
	}  
	private static void init_lookup_table() {
		fact[0] = 1;
		for(int i = 1; i < 9; i++) {
			fact[i] = fact[i-1] * i;
		}
		Arrays.fill(vis, false);
	}
	private static boolean try_to_insert(int s) {
		int code = 0;
		for(int i = 0; i < 9; i++) {
			int cnt = 0;
			for(int j = i+1; j < 9; j++) {
				if(st[s][j] < st[s][i]) {
					cnt++;
				}
			}
			code += fact[8-i] * cnt;
		}
		if(vis[code]) {
			return false;
		}
		return vis[code] = true;
	}
	
	private static void print_path(int cur) {
		while(cur != 1) {
			path.insert(0,dir.charAt(move[cur]));
			cur = fa[cur];
		}
	}
	private static int bfs() {
		init_lookup_table();
		int front = 1 , rear = 2;
		try_to_insert(front);
		while(front < rear) {
			if(A
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值