BASIC-27_蓝桥杯_2n皇后问题
题目:
接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
#include <stdio.h>
#define N 8
int n = 0 ;
int f[N][N] = {0};
int sum = 0;
int flag = 0;
/*同一行、同一列、对角线 为 0*/
void change(int i , int j , int k , int num[][N])
{
int tmp = 0 ;
int x = 0 , y = 0 ;
/*由于是从上至下搜索,可以考虑删去对上面的处理*/
//N = 5;
//int arr[N][2] = {{0,-1},{0,1},{1,-1},{1,0},{1,1},};
int arr[N][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1},};
for (tmp = 0 ; tmp < N ; tmp ++)
{
x = i + arr[tmp][0] ;
y = j + arr[tmp][1] ;
while(x >= 0 && y >= 0 && x < n && y < n)
{
num[x][y] = k;
x += arr[tmp][0];
y += arr[tmp][1];
}
}
return ;
}
void dfs_2n(int step , int map[][N])
{
int x = 0 , y = 0 ;
int i = 0 , j = 0 , k = 0 ;
int tmp[N][N] = {0};
if (step == n )
{
sum ++;
#if 0/*打印棋盘.黑皇后->2,白皇后->3*/
printf("====================\n");
for (x = 0 ; x < n ; x ++)
{
for (y = 0 ; y < n ; y ++)
printf("%d ",f[x][y]);
printf("\n");
}
#endif
return ;
}
for (j = 0 ; j < n ; j ++)
{
if (map[step][j])
{
map[step][j] = 0;
f[step][j] = 3; /*白皇后->3*/
for (x = 0 ; x < n ; x ++)
{
for (y = 0 ; y < n ; y ++)
{
tmp[x][y] = map[x][y];
}
}
change(step,j,0,tmp);
dfs_2n( step+1 , tmp);
map[step][j] = 1;
f[step][j] = 1;
}
}
return ;
}
void dfs_1n(int step , int map[][N])
{
int x = 0 , y = 0 ;
int i = 0 , j = 0 ;
int tmp[N][N] = {0};
if (step == n )
{
for (i = 0 ; i < n ; i ++)
{
for (j = 0 ; j < n ; j ++)
{
if (f[i][j] == 1)
map[i][j] = 1;
else
map[i][j] = 0;
}
}
dfs_2n( step%n , map);
return ;
}
for (j = 0 ; j < n ; j ++)
{
if (map[step][j])
{
map[step][j] = 0;
f[step][j] = 2;/*黑皇后->2*/
for (x = 0 ; x < n ; x ++)
{
for (y = 0 ; y < n ; y ++)
{
tmp[x][y] = map[x][y];
}
}
change(step,j,0,tmp);
dfs_1n( step+1 , tmp);
map[step][j] = 1;
f[step][j] = 1;
}
}
return ;
}
int main(void)
{
int i = 0 , j = 0 ;
int map[N][N] = {0};
scanf("%d",&n);
for (i = 0 ; i < n ; i ++)
{
for (j = 0 ; j < n ; j ++)
{
scanf("%d",&map[i][j]);
f[i][j] = map[i][j];
}
}
dfs_1n(0,map);
printf("%d",sum);
return 0;
}
BASIC-27_蓝桥杯_2n皇后问题的更多相关文章
- 蓝桥杯 2n皇后问题 深搜
默认大家会了n皇后问题 基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和 ...
- 蓝桥杯 2n皇后问题
题意: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一 ...
- 蓝桥杯练习系统—基础练习 2n皇后问题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...
- 蓝桥杯—BASIC-27 2n皇后问题(DFS)
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...
- 蓝桥杯之 2n皇后问题(双层dfs,暴力)
Description 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后 和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两 个白皇后都不在同 ...
- Java实现 蓝桥杯VIP 基础练习 2n皇后问题
基础练习 2n皇后问题 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一 ...
- 方格填数--蓝桥杯---dfs
答案:1580 相似题目:N皇后问题 注意要枚举的是什么 #include<iostream> #include<string.h> using namespace std; ...
- 2012年 蓝桥杯预赛 java 本科 题目
2012年 蓝桥杯预赛 java 本科 考生须知: l 考试时间为4小时. l 参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...
- 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
随机推荐
- C++ primer 第四版 练习3.13,3.14
读一组整数到 vector 对象,计算并输出每对相邻元素的 和.如果读入元素个数为奇数,则提示用户后一个元素 没有求和,并输出其值. vector<int> ivec; int ival; ...
- Supervisor 配置过程
Supervisor 配置过程 (转自https://www.izixia.cn/2016/01/03/supervisor-pei-zhi-guo-cheng/) 1.安装 pip install ...
- 0122有关List、Set、Map的练习
import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; public class SZYL { ...
- mysql-5.6.17-win32安装
下载免安装压缩文件http://dev.mysql.com/downloads/mysql/ 解压到自定义目录,我这里演示的是D:\wamp\mysql\ 复制根目录下的my-default.in ...
- "Incorrect string value: '\\xE7\\x89\\x8C\\xE5\\xB1\\x80...' for column 'name' at row 1")
出现这个错误的原因是,数据库的编码格式为latin1 而我要将utf8的中文插入到数据库中. mysql> alter database xxx default character set ut ...
- OO面向对象多线程编程作业总结
第五次作业:多线程电梯调度 设计策略 在本次电梯作业当中,我构造了一个电梯请求队列线程,一个调度器线程,三个电梯线程,一个文件输出线程,还有主线程. 调度器扫描用户的请求队列,将每个队列分配给 ...
- MySQL性能优化方法三:索引优化
原文链接:http://isky000.com/database/mysql-performance-tuning-index 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引可以提高数据 ...
- opencv-python教程学习系列12-图像阈值
前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍图像阈值/二值化,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 ...
- StyleCop 是什么,可以帮助团队带来什么价值?
StyleCop 本质上是一个 C# 源代码规则分析器,可以帮助团队成员强制执行一组代码样式和一致性规则. 本文将简述 StyleCop 以及它能为团队带来的价值. 本文内容 StyleCop 是什么 ...
- IIS 使用 HTTP/2
什么叫HTTP/2? HTTP 2.0即超文本传输协议 2.0,是下一代HTTP协议.是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis ...