方格填數 —— dfs

方格填數

如下的10個格子
在這裏插入圖片描述

填入0~9的數字。要求:連續的兩個數字不能相鄰。
(左右、上下、對角都算相鄰)

一共有多少種可能的填數方案?

//方格填數
public class Main{  
	static int cnt=0;
	static boolean []vis = new boolean[10]; //標記每個數是否被訪問
	static int [][]table = new int[3][4];
	public static void main(String[] args)
	{
		for(int i = 0;i<3;i++){
			for(int j=0;j<4;j++){
				table[i][j] = -2;  //全部設置爲-2
			}
		}
		
		for(int j=0;j<10;j++){
			vis[j] = false;
		}
		
		dfs(table,0,1);		
		System.out.print(cnt);
	}
	
		
	private static void dfs(int[][] table, int i, int j) {
		if(i==2 && j==3){
		    cnt++;
			return; 
		}

 		for(int t=0;t<10;t++){
			boolean flag = check(t,i,j);  //檢查t是否可以填入
			if(flag == true && vis[t] == false) 
			{
				table[i][j] = t;
				vis[t] = true;
				dfs(table,i+(j+1)/4,(j+1)%4);
				table[i][j] = -2;
				vis[t] = false;
			}
		}
	}
	
    //判斷相鄰格子的數字是否連續
	private static boolean check(int num, int i, int j) {
	        if(i-1>=0 && (table[i-1][j] == num+1 || table[i-1][j] == num-1)){   //判斷上方格子
	            return false ;
	        }
	        if(j-1>=0 && (table[i][j-1] == num+1 || table[i][j-1] == num -1)){  //判斷左方格子
	            return false ;
	        }
	        if(i-1>=0 && j-1 >= 0 && (table[i-1][j-1] == num+1 || table[i-1][j-1] == num - 1)){ //判斷左上方格子
	            return false ;
	        }
	        if(i-1>=0 && j+1 < 4 && (table[i-1][j+1] ==num+1 || table[i-1][j+1] == num - 1)){   //判斷右上方格子
	            return false ;
	        }
	        if(j+1<4 && (table[i][j+1] == num+1 || table[i][j+1] == num-1)){    //判斷右方格子
	            return false ;
	        }
	        if(i+1<3 && (table[i+1][j] == num+1 || table[i+1][j] == num-1)){    //判斷下方格子
	            return false ;
	        }
	        if(i+1<3 && j-1>=0 && (table[i+1][j-1] == num+1 || table[i+1][j-1] == num-1)){  //判斷左下方格子
	            return false ;
	        }
	        if(i-1<0 && j+1<4 && (table[i+1][j+1] == num+1 || table[i+1][j+1] == num-1)){   //判斷右下方格子
	            return false ;
	        }
	        return true ;
	    }
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章