package practise; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; public class Main { static Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(System.in))); public static void main(String[] args) { n = sc.nextInt(); rec_b = new int[n]; rec_w = new int[n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { map[i][j] = sc.nextInt(); } } dfs_w(0); System.out.println(cnt); } static int n; static int cnt = 0;//结果 static int[] rec_b;//黑皇后 static int[] rec_w;//白皇后 static int[][] map = new int[10][10]; //白皇后dfs private static void dfs_w(int row) { // TODO Auto-generated method stub if(row == n) { dfs_b(0); } for (int col = 0; col < n; col++) { if(map[row][col]==1 && check_w(row,col)) { map[row][col] = 0; rec_w[row] = col; dfs_w(row+1); map[row][col] = 1; rec_w[row] = 0; } } } //判断白皇后位置 private static boolean check_w(int row, int col) { for (int i = 0; i < row; i++) { if(rec_w[i]==col||Math.abs(rec_w[i]-col)==Math.abs(i-row)) { return false; } } return true; } //黑皇后dfs private static void dfs_b(int row) { // TODO Auto-generated method stub if(row == n) { cnt++; return; } for (int col = 0; col < n; col++) { if(map[row][col]==1 && check_b(row,col)) { map[row][col] = 0; rec_b[row] = col; dfs_b(row+1); //回溯 map[row][col] = 1; rec_b[row] = 0; } } } //判断黑皇后位置 private static boolean check_b(int row, int col) { for (int i = 0; i < row; i++) { if(rec_b[i]==col||Math.abs(col-rec_b[i])==Math.abs(i-row)) { return false; } } return true; } }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:573 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:686 |
C语言训练-求函数值 (C语言代码)浏览:600 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:552 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:600 |
【矩阵】 (C++代码)浏览:999 |
理财计划 (C语言代码)浏览:494 |
陶陶摘苹果2 (C语言代码)浏览:650 |
简单的a+b (C语言代码)浏览:617 |