C语言中的8皇后问题。
2017-10-31 10:22
239 查看
8皇后问题
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
输出8皇后问题所有结果。
输入:
没有输入。
输出:
每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
输出8皇后问题所有结果。
输入:
没有输入。
输出:
每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。
#include<stdio.h> static int a[8]={0}; static int cnt=0; int judge(int m,int c)//判断每种情况是否符合8皇后问题要求 { for(int i=0;i<m;i++) { if(a[i]==c) return 0; if((c-a[i])==(m-i)||(c-a[i])==(i-m)) return 0; } return 1; } int print(int a[8],int cnt)//输出函数 { int i,j; printf("No %d:\n",cnt); for(i=0;i<=7;i++) { for(j=0;j<=7;j++) { if(j==a[i])printf("A"); if(j!=a[i])printf("."); if(j==7)printf("\n"); } } } int search(int m)//回溯算法递归调用函数,枚举所有可能。 { int i; if(judge(m-1,a[m-1])==0) return 1;//调用judge函数,判断刚刚加入的皇后是否符合要求。符合则继续讨论下一行或者输出,不符合则返回讨论上一行的下一种情况。 if(m==8) { cnt++; print(a,cnt);//前8行符合要求则输出 } if(m<=7) { for(i=0;i<8;i++) { a[m]=i; search(m+1); } } } int main() { search(0); }
相关文章推荐
- 皇后问题最快的解法(C语言)八皇后、十六皇后时间在毫秒级
- C语言通过深度优先搜索来解电梯问题和N皇后问题的示例
- N 皇后问题C语言实现
- 关于C语言的N皇后问题
- 整数变换问题和N皇后问题解析(C语言)
- n皇后问题的两种递归方法C语言实现
- 八皇后问题,C语言实现,求出第一行第一列有皇后的解
- usaco Section 1.5 Checker Challenge 最慢0.162秒0.0+n皇后问题位运算版(C语言)
- c语言dfs解决n皇后问题
- 蓝桥杯 2n皇后问题(精简)C语言
- C语言-数据结构-递归求解实例-8皇后问题
- C语言实现N皇后问题源代码
- C语言实现各大皇后问题
- N皇后问题 C语言深搜
- C语言 N皇后问题
- 算法之8皇后问题(C语言)
- 递归求解N皇后问题(c语言)
- C语言 8皇后问题
- 基于Las Vegas 和回溯法的皇后问题(C语言描述)
- C语言编程 N皇后问题求解