【问题描述】

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。例如下图就是八皇后问题的一个解:

假如一棋盘已经正确放置了七个皇后,编写程序求解最后一个皇后的放置位置。

【输入形式】

按照棋盘列由小到大的顺序从控制台输入已正确放置的皇后的行数(行数从1开始计数),未放置皇后的列以字符“”表示。各行数和字符“”之间没有任何其它字符分隔,在输入末尾有回车换行符。例如:上图棋盘假如第5列没有放置皇后,其它七个皇后都已放置完毕,则输入的形式为:4815*263。

【输出形式】

在标准输出上输出最后一个皇后应该放置的行数(行数大于等于1,小于等于8,行数后的回车换行可有可无)。若无解,则输出字符串:No Answer。

【输入样例1】

481*7263

【输出样例1】

5

【样例1说明】

根据输入样例,在棋盘的第一列、第四行位置放置了一皇后,同样在第二列、第八行,第三列、第一行,第五列、第七行,第六列、第二行,第七列、第六行,第八列、第三行也分别放置了一皇后,第四列没有放置皇后。那么为了满足八皇后问题的要求,我们只有在第四列、第五行放置一皇后,所以输出行数为5。

【输入样例2】

1526374*

【输出样例2】

No Answer

【样例2说明】

根据输入样例,在棋盘的第一列、第一行,第二列、第五行,第三列、第二行,第四列、第六行,第五列、第三行,第六列、第七行,第七列、第四行分别放置了一皇后,第八列没有放置皇后。但是根据八皇后问题的要求,前七个皇后放置之后,第八列任何位置都不能放置皇后,否则就会被吃掉。所以输出:No Answer。

#include<stdio.h>
#include<stdlib.h>
int hashTable[9] = { 0 };
int main()
{char c;int n, a[9], i, j, t=0;int col;for (i = 1; i <= 8; i++){scanf("%c",& c);char s[1];s[0]=c;if (c >= 48 && c <= 57){a[i] = atoi(s);//转化为整型hashTable[a[i]] = 1;//标记位置}elsecol = i;//未输入的皇后所在列数}for (j = 1; j <= 8; j++){if (hashTable[j] == 0)t = j;//代表未输入的皇后的位置}int flag = 1;for (i = 1; i <= 8 && i != col; i++){if (abs(i - col) == abs(a[i] - t))//如果在一条线上{flag = 0;break;}}if (flag)printf("%d", t);elseprintf("No Answer");return 0;
}

八皇后问题(C语言)相关推荐

  1. C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法

    偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...

  2. 八皇后问题c语言循环,八皇后问题的12组解

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #define N 8 /*皇后数*/ typedef int bool; rot(char d[ ],char s[ ...

  3. 八皇后问题--C语言学习笔记

    在下面所示的棋盘中,皇后可以攻击位于箭头所覆盖的位置的所有棋子,那么现在有八个皇后,如何放置可以让他们之间不会相互攻击呢? 本文采用回溯法,先附上维基百科上对回溯法的解释: " 回溯法(英语 ...

  4. 88皇后问题C语言程序设计,八皇后问题--C语言程序设计.pdf

    八皇后问题 学 2012年 9 月 5 日 目录 一.选题 1.1背景知识---------------------------2 1.2设计目的与要求------------------------ ...

  5. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题

    C语言局部算法求解八皇后问题 写在前面 八皇后问题及局部搜索算法 爬山法(hill-climbing searching) 算法介绍 代码实现 退火法(simulated annealing) 算法介 ...

  6. 八皇后java_经典八皇后问题:Java语言

    问题描述:将八个皇后放在棋盘上,任何两个皇后都不能互相攻击(即没有任何两个皇后在同一行.同一列或者同一对角线上)如图所示,题目来自于<java语言程序设计:基础篇>练习题6.20和6.22 ...

  7. 用java实现八皇后问题_使用java语言实现八皇后问题

    八皇后问题,在一个8X8的棋盘中,放置八个棋子,每个棋子的上下左右,左上左下,右上右下方向上不得有其他棋子.正确答案为92中,接下来用java语言实现. 解: package eightQuen; / ...

  8. C语言递归解决八皇后问题

    八皇后问题,任意两个皇后都不能处于同一行.同一列或同一斜线上. 在8x8的格子上,我们可以约定每一个皇后都占一行,这样就不会出现行冲突.任何在一次将一个皇后放在一列上,判断是否与前面的皇后有冲突,直到 ...

  9. 八皇后问题遗传算法c语言,遗传算法解决八皇后问题

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 八皇后问题描述 19 世纪著名的数学家 Gauss 在 1850 年提出八皇后问题后, 该问题成为各类语言程序设计的经典 ...

  10. 经典问题——八皇后问题:最适合C语言初学者的解法

    什么是八皇后问题: 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后 ...

最新文章

  1. TSQL 聚合函数忽略NULL值
  2. WinForm禁用窗体自带的关闭功能
  3. 电力行业信息系统安全等级保护基本要求_重磅 | 国家标准电力信息系统安全等级保护实施指南将于2019年7月实施(附全文)...
  4. 【转载】SAP集成会计凭证生成的原理
  5. git status 命令总结 —— Git 学习笔记 06
  6. 浏览器json格式化插件 yformater
  7. mavros 仿真与飞行器控制
  8. HTTP CORS(HTTP-同源策略)
  9. 如何列出npm用户安装的软件包?
  10. python json.dumps() 中文乱码问题
  11. 如何在Win7自安装驱动
  12. 深入浅出MFC:动态创建控件
  13. 解决IDEA中的Tomcat Localhost日志乱码问题
  14. 明解C语言。初级版 部分练习代码
  15. 零售的哲学 零售心理战 读后感--7-11这个产品不错!
  16. java正则校验qq邮箱_检测邮箱是否是QQ邮箱并给出提示_正则实例
  17. android中LitePal的使用
  18. 微信公众号:开发者工具下载、安装、使用
  19. csv加header python_用python处理csv格式文件
  20. 某些函数改为了inline方式优化。开始写CCursor类。

热门文章

  1. Enterprise Libary 2 Hands-on-Lab 发布了
  2. C#之不得不上的网站。
  3. pulsar学习笔记1:helloworld
  4. 如何实现插入数据时自动更新另外一个表的内容
  5. windows下PostgreSQL 安装与配置
  6. HDU 3652:B-number(数位DP)
  7. PHP 数组排序函数sort,rsort,ksort,krsort,asort,arsort区别
  8. [转]学会使用DB2指令
  9. 【实习之T100开发】T100 双档程序开发流程
  10. MD5工具类 加盐加密 及编码