洛谷P1219 [USACO1.5]八皇后 Checker Challenge(C语言)
洛谷P1219 [USACO1.5]八皇后 Checker Challenge
- 题目
- 代码
这个八皇后问题也是经典入门深搜的题目了呀,理论上深搜都可以运用数据结构的栈来模拟计算机内部的压栈操作。但这里实在是麻烦,就把我以前做的题解注释下发出来,一边方便自己复盘总结,一边也给大家提供一个思路吧。
题目
八皇后的由来和问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例
。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格
的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后
都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯
认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40
种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,
有多种计算机语言可以解决此问题。
(百度大法增添文学性)
代码
这里我并没有用容易想到的二维数组,因为TLE了,数组太大浪费时间。。就用几个一位数组进行模拟即可,详情见代码。
#include<stdio.h>
//存为全局变量方便调用
int n,l,size,Maxprint,col[100000],left[100000],right[100000],a[100000];
//注意此处的Maxprint(最大输出数)为全局变量,每调用一次print函数就会加一
//n存总解数
//a存行
//col存列
//left存左下到右上的对角线(行+列的和相同)
//right存右下到左上的对角线(行-列的差相同)
void print()
{if(Maxprint<3){for(int i=1;i<=size;i++)printf("%d ",a[i]);printf("\n");Maxprint++;}return ;
}
int Judge(int x,int y)
{if(col[y]==1||left[x+y]==1||right[x-y+10000]==1)//若被占领则返回0return 0;elsereturn 1;
}
void search(int x)//深搜,x为起始搜索行
{if(x>size){n++;//总解数加一print();//调用输出函数return ;}for(int i=1;i<=size;i++)//从起始搜索行x开始遍历列if(Judge(x,i)==1){a[x]=i;col[i]=left[x+i]=right[x-i+10000]=1;search(x+1);col[i]=left[x+i]=right[x-i+10000]=0;//回溯}
}
int main()
{scanf("%d",&size);for(int i=0;i<10000;i++)a[i]=col[i]=left[i]=right[i]=0;//棋盘初始化search(1);//首先从第一行开始搜printf("%d",n);//输出总解数return 0;}
洛谷P1219 [USACO1.5]八皇后 Checker Challenge(C语言)相关推荐
- P1219 [USACO1.5]八皇后 Checker Challenge 题解
background:给朋友讲题,顺便过了这道几年前遗留的题 P1219 [USACO1.5]八皇后 Checker Challenge - 洛谷 | 计算机科学教育新生态 (luogu.com.cn ...
- P1219 [USACO1.5]八皇后 Checker Challenge(二进制)
昨天看到群里有小萌新在问八皇后,突然想起这玩意还有二进制写法,于是来了一发. vec<vec<int>> res; int n, ans = 0, mask;void back ...
- [USACO1.5]八皇后 Checker Challenge
给定一个 N×N 的棋盘,请你在上面放置 N 个棋子,要求满足: 每行每列都恰好有一个棋子 每条对角线上都最多只能有一个棋子 上图给出了当 N=6 时的一种解决方案,该方案可用序列 2 4 6 1 3 ...
- 八皇后 Checker Challenge
题目 : 八皇后 Checker Challenge 前言 : 深度优先搜索也是一种暴力枚举的算法,但是相较于循环枚举这种固定层数而且不能随意增减层数的枚举形式来说, DFS更具有优势,因为DFS是逐 ...
- 深度优先搜索——八皇后问题(洛谷 P1219)
题目选自洛谷P1219 该题针对6-13皇后都行,只需改动输入的数字. 八皇后问题是经典的DFS问题,唯一需要注意的就是判断能够放置的条件,即满足什么状况是对的. 题目要求不能在同一行,同一列 ...
- 八皇后 Checkr Challenge
** 八皇后 checkr challenge ** 洛谷原题p1912 https://www.luogu.com.cn/problem/P1219 题目分析 dfs搜索 每行每列对角线上不能有重复 ...
- 洛谷 P1219 八皇后
P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...
- 洛谷 P1219 ---- 八皇后
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- 洛谷——P1219 八皇后
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
最新文章
- TCP/IP 协议理解
- Floyd_Warshall POJ 1847 Tram
- mysql数据库连接jar_mysql数据库连接包
- 2.3.7 操作系统之管程和java中实现管程的机制
- 【CASS精品教程】南方CASS内业基本作图--野外测记草图法绘制常见地物教程
- 算法设计与分析——贪心算法——汽车加油问题
- python 相对导入_python 相对导入与绝对导入
- python文件分块读取_Python多进程分块读取超大文件的方法
- java8学习之Function与BiFunction函数式接口详解
- vs2015安装vs assist 教程
- IDEA导入JDK源码
- TikTok干货分享:创作者基金申请流程及常见问题解答
- 如何解决移动硬盘弹出后还在转的问题
- ioncube加密与解密 php代码
- LoadBalancer 负载均衡
- Vue2项目中使用AntV/X6 分辨率适配
- 高颜值时尚小巧蓝牙耳机推荐,女友生日过节最强送礼装备
- [转载] 我叫李小帅
- mouseenter/mouseleave多次触发fadeIn/fadeOut问题
- 如果你不想长期996,看看这个
热门文章
- 一文读懂 Python 装饰器
- 在oracle中要谨慎使用when others then(二)
- Yapi集成到Jenkins实现接口自动化—最全面的流程讲解
- English语法_名词性从句 - what
- 主控是sm2259xt,求量产工具,固态硬盘是七彩虹sl500 250G的
- 致敬Gif之父,使用Java生成Gif图片
- js调用vlc_web网页中使用vlc插件播放相机rtsp流视频
- vlc多媒体播放器VLC Media Player 3.0.7.1中文版
- python通过异步爬取小说
- BBS论坛 home主页与个人站点主页