资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
输入格式
输入的第一行为一个整数n,表示棋盘的大小。 接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。 输出格式 输出一个整数,表示总共有多少种放法。
样例输入
4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
样例输出
2
样例输入
4 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
样例输出
0
import java.util.Scanner;
public class 二N皇后问题 {
static int map[][];//存储地图
static int ans=0;//计算方法
static int n;//地图的大小
public static boolean judge(int cur,int i,int color){
for(int j=cur-1;j>=0;j--){//判断同一列是否有相同颜色的皇后
if(map[j][i]==color){
return false;
}
}
for(int j=cur-1,z=i-1;j>=0&&z>=0;j--,z--){//判断对角线左侧是否有相同颜色的皇后
if(map[j][z]==color){
return false;
}
}
for(int j=cur-1,z=i+1;j>=0&&z<n;j--,z++){//判断对角线右侧是否有相同颜色的皇后
if(map[j][z]==color){
return false;
}
}
return true;
}
public static void dfs(int cur,int color){
if(cur==n){//代表黑色放完了
if(color==2){
dfs(0,3);
}
else{
ans++;