8皇后问题

来源:互联网 发布:58网络电视直播 编辑:程序博客网 时间:2024/06/16 04:37

1007.8皇后问题

时限:1000ms 内存限制:10000K  总时限:3000ms

描述
输出8皇后问题所有结果。
 
输入
没有输入。
 
输出
每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。
 
输入样例
 
输出样例
输出的前几行:
No 1:
A.......
....A...
.......A
.....A..
..A.....
......A.
.A......
...A....
No 2:
A.......
.....A..
.......A
..A.....
......A.
...A....
.A......
....A...


#include<iostream>#include<stdio.h>#include<math.h>using namespace std;int a[8]={0};int num=0;int check(int row,int col);void output2();int search(int m);int main(){search(0);return(0);}int search(int m){int i;int row,col;if(m==8) {num++;output2();return(0);}for(i=0;i<8;i++){a[m]=i;row=m,col=i;if(check(row,col)) search(m+1);}return(0);}int check(int row,int col){int i;for(i=0;i<row;i++){if(a[i]==col||fabs(row-i)==fabs(col-a[i])){return(0);}}return(1);}void output2(){char b[8][8];int i,j;for(i=0;i<8;i++){for(j=0;j<8;j++){b[i][j]='.';}}for(i=0;i<8;i++){b[i][a[i]]='A';}printf("No %d:\n",num);for(i=0;i<8;i++){for(j=0;j<8;j++){cout<<b[i][j];}cout<<endl;}}

通过递归函数实现所有情况的穷举。
原创粉丝点击