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 人评分
点我有惊喜!你懂得!浏览:1069 |
C语言训练-求PI* (C语言代码)浏览:897 |
C语言训练-谁家孩子跑最慢* (C语言代码)浏览:1508 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:674 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:2468 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:439 |
printf基础练习2 (C语言代码)浏览:942 |
拆分位数 (C语言代码)浏览:1327 |
兰顿蚂蚁 (C++代码)浏览:1045 |
printf基础练习2 (C语言代码)浏览:747 |