八皇后
来源:互联网 发布:表情图片制作软件下载 编辑:程序博客网 时间:2024/04/28 19:08
这是做题前写的简单的思路
1、输入n,皇后个数
2、从0开始,放皇后放皇后条件{ 1、横向row==0
2、纵向hign==0
3、斜线line1==0
4、斜线line2==0
5、皇后个数未超界
}
放完皇后,row、high、line1、line2,都等于1
最后一个皇后成立,输出记录数组
了解了主要思路以后,解题就轻松多了。
无须多言,看我的注释就好
#include <stdio.h>int N;//皇后个数int record[101][101]={0};//记录每个位置是否有皇后int row[101]={0};//记录某一行是否有皇后int high[101]={0};//记录每一列int line1[202]={0};//‘/’的斜线int line2[202]={0};//‘\’的斜线int tms=0;//可能的情况数void print(){int i,j;for (i=0;i<N;i++){for (j=0;j<N;j++){printf("%d ",record[i][j]);}printf("\n");}printf("\n");}int judge(int i,int j){if (row[i]||high[j]||line1[i+j]||line2[i+N-1-j])//有一个标记为1,这个点就不能放return 0;else return 1;}void unmark(int i,int j){row[i]=0;high[j]=0;line1[i+j]=0;line2[i+N-1-j]=0;record[i][j]=0;}void mark(int i,int j){row[i]=1;high[j]=1;line1[i+j]=1;//注意观察就能发现,每个斜线都能有它唯一的编号line2[i+N-1-j]=1;//想不到的话就画图观察一下,你能观察到的record[i][j]=1;}void add(int n){int i;//int result;if (n==N-1)//放置最后一行时,有一个可放置点,即输出一种情况{for (i=0;i<N;i++){if (judge(n,i))//判断(n,i)这个点是否合法{mark(n,i);//若合法,则对该点进行标记print();//输出当前的皇后排布tms++;unmark(n,i);//取消对该点的标记,因为所有的标记数组都是全局变量}}} else{for(i=0;i<N;i++){//对第n行的每个点进行判断if(judge(n,i)) {mark(n,i);add(n+1);//第n行放置一个皇后以后,在第n+1行放置皇后unmark(n,i);}}}}int main(){scanf("%d",&N);//输入皇后个数add(0);//从第0行开始放置if (tms==0)//输出有多少种情况{printf("Sorry,%d Empress can not be peaceful\n",N);}else printf("There's %d ways to put them~\n",tms);return 0;}
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- 八皇后
- set_intersection的用法
- 添加标注图层
- 在C++中模拟委托事件的方法(一)
- 在objc中使用struct
- javascript hashtable
- 八皇后
- Linux上iptables防火墙的基本应用教程
- 自定义版本号
- 总结查找图元的三种方法
- set_difference的用法
- 网易游戏2011.10.15校园招聘会笔试题
- 数据结构程设计-------哈弗曼编码
- ora-12541: TNS:监听程序当前无法识别连接描述符中请求的服务
- 新买的m180l(韩版p1000)评测