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

📄 puzzlecoz.java

📁 This is an example of solving 8puzzle problem by computer
💻 JAVA
字号:
import java.util.*;
public class PuzzleCoz {
	Vector tree= new Vector(),path = new Vector();
	int k=0;
	Node kopyaNode;

	public PuzzleCoz(Node node){
		tree.add(0,node);
		path = cozumuAl(puzzleCoz());
		
	}


	private Node degistir(Node node, int a , int b){
		int t1=0,t2=0;
		for(int i=0;i<9;i++){
			if(node.sira[i]==a)
				t1=i;
			if(node.sira[i]==b)
				t2=i;
		}
		int temp = node.sira[t1];
		node.sira[t1]=node.sira[t2];
		node.sira[t2]=temp;
		return node;
	}
	
	public Node kopyala(Node node){
		int sira[]=new int[9];
		for(int i=0;i<9;i++){
			sira[i] = node.sira[i];
		}
		Node kopyala = new Node(sira);
		return kopyala;

	}

	public int dugumOlustur(Node node, int root, int k){
		Node node1 = (Node)tree.get(node.root);
		int pre = node1.sira[0];
		int bos = node.sira[0];
		switch(bos){
		case 0:
			if(pre != 2){	
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,0,2));
			}if(pre != 4){			 
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,0,4));
			}if(pre != 6){
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,0,6));
			}if(pre != 8){			 
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,0,8));
			}			 
			break;

		case 1:
			if(pre != 2){ 
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,1,2));
			}if(pre != 8){
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,1,8));
			}
			break;

		case 2:
		case 4:
		case 6:
		case 8:
			if(pre != (bos-1)%8){
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,bos,(bos-1)%8));
			}if(pre != 0){
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,bos,0));
			}if(pre != (bos+1)%8){
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,bos,(bos+1)%8));			
			}
			break;

		case 3:
		case 5:
		case 7:
			if(pre != (bos-1)){
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,bos,bos-1));
			}
			if(pre != (bos+1)){
				kopyaNode = kopyala(node);
				kopyaNode.root = root;
				tree.add(++k,degistir(kopyaNode,bos,bos+1));
			}
			break;
		}
		return k;
	}	
	
	public int puzzleCoz(){
		Node nod;
		int k=0,bas=0,son=0,ok=0,depth=12;
		do{		
				for(int i=bas;i<=son;i++){
					nod = (Node)tree.get(i);
					k = dugumOlustur(nod, i ,k);
				}
				for(int i=bas;i<=son;i++){
					nod = (Node)tree.get(i);			
					for(int j=0;j<9;j++)
						if(nod.sira[j] == j)
							ok++;
					if(ok > 7){
						System.err.println("bulundu-->"+i);
						
						return i;
					}
					else
						ok=0;
				}
				bas = son+1;
				son = k;
			
		}while(depth-- > 0);
		return -1;
	}
	
	public Vector cozumuAl(int i){
		if(i<0) return null;
		Node node;
		if(i==0) {
			path.add((Node)tree.get(0));
			return path;
		}
		while(i>0){
			node = (Node)tree.get(i);
			path.add(node);
			i = node.root;
		}
		Vector path2=new Vector();
		for(int j=0;j<path.size();j++){
			path2.add(j,path.get(path.size()-j-1));
		}
		return path2;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -