标签:示例 port 蓝桥杯 1.0 buffer span amr info 结束
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 5 public class Main { 6 public static int n = 0; //皇宫的大小 7 public static int x = 0; //皇上横坐标位置(注:从1开始) 8 public static int y = 0; //皇上纵坐标的位置(注:从1开始) 9 public static int[] column_num; //所放皇后的列号 10 public static int[][] palace; //皇宫 11 public static int count = 0; //几种方案 12 13 public static void main(String[] args) throws IOException { 14 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 15 String[] str = br.readLine().split(" "); 16 n = Integer.parseInt(str[0]); 17 x = Integer.parseInt(str[1]); 18 y = Integer.parseInt(str[2]); 19 20 int k = x-2 > 0 ? x-2 : 0; //皇上行范围的开始位置 21 int m = y-2 > 0 ? y-2 : 0; //皇上列范围的开始位置 22 x = x > n-1 ? n-1 : x; //皇上行范围的结束位置 23 y = y > n-1 ? n-1 : y; //皇上列范围的结束位置 24 25 column_num = new int[n]; 26 palace = new int[n][n]; 27 28 for(int i = k; i <= x; i++){ //皇上范围置-1 29 for(int j = m; j <= y; j++){ 30 palace[i][j] = -1; 31 } 32 } 33 34 place(0); 35 36 System.out.println(count); //输出方案数 37 38 } 39 40 //放皇后 41 private static void place(int num) { 42 if(num == n){ //如果已经放完了 43 count++; 44 }else{ 45 for(int column = 0; column < n; column++){ //列变化 46 if(palace[num][column] == -1){ 47 continue; 48 } 49 column_num[num] = column; //记录列号 50 boolean flag = true; 51 for(int number = 0 ; number < num; number++){ //用放置好的去验证它是否放置准确 52 if(column_num[num] == column_num[number] || //是否在列 53 num + column_num[num] == number + column_num[number] || //是否在左对角线 54 num - column_num[num] == number - column_num[number]){ //是否在右对角线 55 flag = false; 56 break; 57 } 58 } 59 60 if(flag){ //如果放置好了,就去放置下一个皇后 61 place(num+1); 62 } 63 } 64 } 65 } 66 67 }
标签:示例 port 蓝桥杯 1.0 buffer span amr info 结束
原文地址:http://www.cnblogs.com/cao-lei/p/6551114.html