0
import java.util.*;public class Main{ static int n,count=0; static int map[][]; public static void main(String args[]) { Scanner cn=new Scanner(System.in); n=cn.nextInt(); map=new int[n][n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) map[i][j]=cn.nextInt(); Put(0,2); //假设黑皇后为2 白皇后为3 放了皇后的地方就用2,3表示 System.out.PRintln(count); } public static void Put(int t,int s) { if(t==n) { if(s==2)Put(0,3); else count++; return ; } for(int i=0;i<n;i++) { if(map[t][i]!=1)continue; if(Check(t,i,s))map[t][i]=s; else continue; Put(t+1,s); map[t][i]=1; //回溯法的关键 } return ; } public static boolean Check(int t,int i,int s) { for(int q=t-1;q>=0;q--) { if(map[q][i]==s)return false; } for(int q=t-1,w=i-1;q>=0&&w>=0;q--,w--) //检查主对角线 这行以下的还没放 不检查 { if(map[q][w]==s)return false; } for(int q=t-1,w=i+1;q>=0&&w<=n-1;q--,w++) { if(map[q][w]==s)return false; } return true; }}
新闻热点
疑难解答