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

📄 node.java

📁 利用A*算法实现8数码,其中利用数组来实现节点的存贮
💻 JAVA
字号:
public class Node
    {   
        int depth,stepNumber; //节点深度 
        int code[][] = new int[3][3]; //数码数组
        boolean isUsed;//???????? 
        Node father; //父节点
        public Node() //无参数的构造方法 
        { 
            isUsed = false; 
        } 
        public Node(Node n)//参数是一个节点的构造方法建立一个新的节点并且和原来的一样 
        { 
            depth = n.depth; 
            for(int i=0;i<3;i++) 
                for(int j=0;j<3;j++) 
                        code[i][j]=n.code[i][j]; 
            stepNumber = n.stepNumber; 
            isUsed = n.isUsed; 
        } 
        public Node(int a[])//参数是一个数组 得到的新的节点是一个0到8的数组成二维的 
        { 
            int m=0; 
            for(int i=0;i<3;i++) 
                for(int j=0;j<3;j++) 
                    { 
                        code[i][j]=a[m]; 
                        m=m+1; 
                    } 
           isUsed = false; 
            depth=0; 
           System.out.println("测试4确保成功给值!");//测试 
        } 
        public int getX(int m){
        	int x=0;
        	for(int i=0 ; i<3 ; i++) 
                for(int j=0; j<3 ;j++) 
                    { if( this.code[i][j]==m ) 
                    	x= i;
                    
                    } 
        return x;
        }
        public int getY(int m){
        	int y=0;
        	for(int i=0 ; i<3 ; i++) 
                for(int j=0; j<3 ;j++) 
                    { if( this.code[i][j]== m ) 
                    	{
                    	y= i;
                    	break;
                    	}
                    
                    } 
        return y;
        }
        public int[][] getCode()//方法可以获得节点的首地址也就是他的内容 
        { 
            return code; 
        } 
        public boolean ifEqual(Node st)//只是数码不相等//判断两个节点是不是相同 
        { 
            int[][] s = st.getCode(); 
            int i,j; 
            for (i = 0; i < 3; i++) 
                for(j = 0 ; j<3 ;j++) 
                if (s[i][j] != this.code[i][j]) 
                    return false; 
            return true; 
        } 
         public int[] getZeroPosition()//获得节点中0点的位置 
        { 
            int weizhi[] = new int[2]; 
            for(int i=0;i<3;i++) 
                for(int j=0;j<3;j++) 
                    if(this.code[i][j]==0) 
                        {weizhi[0]=i;weizhi[1]=j;} 
            return weizhi;                 
        } 
       
        public int getStepNumber(Node a){//获得当前节点到目标节点的步数
        	int m=0;
        	
        	for(int i=0 ; i<3 ; i++) 
                for(int j=0; j<3 ;j++) 
                    { 
                	if( a.code[i][j] != this.code[i][j] && a.code[i][j]!=0 ) {
                		int x =0;
                		int y=0;
                    	if(i>this.getX(a.code[i][j]))
                    	{
                    		
                    		x= i-this.getX(a.code[i][j]);
                    	}
                    	else{
                    		x=this.getX(a.code[i][j])-i;
                    	}
                    	
                    	if(j>this.getY(a.code[i][j]))
                    	{
                    		
                    		y= j-this.getY(a.code[i][j]);
                    	}
                    	else{
                    		y=this.getY(a.code[i][j])-j;
                    	}
                    	m=m+x+y;
                	}
                    	
                    	
                    } 
        	
        	return m;
        }
    } 

⌨️ 快捷键说明

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