八皇后问题
2014-05-08 10:51
344 查看
#include
#include
#include
#define N 8
int left[2*N+1];
int right[2*N+1];
int column[N+1];
int a[N+1];
int times=0;
void show(){
times++;
printf("第%d个\n",times);
int i,j;
for(i=1;i<=N;i++){
for(j=1;j<=N;j++){
if(a[i]==j)
printf("1 ");
else
printf(".");
}
printf("\n");
}
printf("\n");
}
void search(int row){
if(row>N)
show();
else{
int col;
for(col=1;col<=N;col++){
//printf("column[%d]:%d\n",col,column[col]);
if(column[col]==0&&left[N+row-col]==0&&right[col+row]==0){
column[col]=1;
left[N+row-col]=1;
right[row+col]=1;
a[row]=col;
search(row+1);
column[col]=0;
left[N+row-col]=0;
right[row+col]=0;
}
}
}
}
int main(){
memset(left,0,2*N+1);
memset(right,0,2*N+1);
memset(column,0,N+1);
memset(a,-1,N+1);
search(1);
return 0;
}
#include
#include
#define N 8
int left[2*N+1];
int right[2*N+1];
int column[N+1];
int a[N+1];
int times=0;
void show(){
times++;
printf("第%d个\n",times);
int i,j;
for(i=1;i<=N;i++){
for(j=1;j<=N;j++){
if(a[i]==j)
printf("1 ");
else
printf(".");
}
printf("\n");
}
printf("\n");
}
void search(int row){
if(row>N)
show();
else{
int col;
for(col=1;col<=N;col++){
//printf("column[%d]:%d\n",col,column[col]);
if(column[col]==0&&left[N+row-col]==0&&right[col+row]==0){
column[col]=1;
left[N+row-col]=1;
right[row+col]=1;
a[row]=col;
search(row+1);
column[col]=0;
left[N+row-col]=0;
right[row+col]=0;
}
}
}
}
int main(){
memset(left,0,2*N+1);
memset(right,0,2*N+1);
memset(column,0,N+1);
memset(a,-1,N+1);
search(1);
return 0;
}
相关文章推荐
- sticks代码
- Fire&nbsp;Net代码
- 畅通工程再续算法思想及代码
- 中序线索二叉树的实现
- Spell checker源代码
- ofstream&nbsp;和ifstream的具体…
- Farey 分数
- 两个递增有序链表合并为一个链表
- LC-Display代码
- Wall算法分析与设计
- static_cast<>揭密
- Spring声明式事务配置管理方法
- say something to myself at a moment like this
- 了解最基础的CoreData
- CCproxy 设置代理服务器。
- Python print函数用法,print 格式化输出
- Android应用程序开发以及背后的设计思想深度剖析(3)
- jQuery源码 框架分析
- C# 启动子线程实现回调
- mvc教程