八皇后问题的解法
来源:互联网 发布:linux下延时函数 编辑:程序博客网 时间:2024/04/30 15:10
//八皇后问题:在8×8的国际象棋棋盘上,安放8个皇后,
//要求没有一个皇后能够“吃掉”任何其他一个皇后,
//即没有两个或两个以上的皇后占据棋盘上的同一行、同一列或同一对角线。
#include <stdio.h>
int M[8];//依次存放八个皇后的列号,从0开始,即M[i]=j表示i行j列摆一个皇后
//检查第j个皇后是否符合要求
int check(int j)
{ int i;
for(i=0;i<j;++i)
{ if(M[j]==M[i]) return false;//同列'|'
if((j-i)==(M[j]-M[i])) return false;//斜线'/'
if((j-i)==(M[i]-M[j])) return false;//斜线'/'
}
return true;
};
//显示结果
int t=0;//第t个解法
void show()
{ printf("/n第%02d种摆法:",++t);
for(int i=0;i<8;++i)
printf("%d ",M[i]);
};
void queen(int n)
{ int i;
if(8==n)
{ show();
return;
}else
{ for(i=0;i<8;i++)
{ M[n]=i;
if(check(n))
queen(n+1); //递归
}
}
};
//递归求解
void test1()
{ queen(0);
};
//回溯求解
void test2()
{ int i,j;
for(i=0;i<8;++i)//i行
{ for(j=0;j<8;++j)//j列
{ M[i]=j;
back:
if(check(i)) break;
}
if(j<8) continue;//i行j列摆一个皇后
do
{
next:
--i;//行回溯
if(i<0) return;//完成
j=++M[i];
}while(j>=8);
goto back;//列回溯
}
show();
goto next;
};
int main()
{test1();
//test2();
return true;
}
- 八皇后问题的解法
- 八皇后问题解法
- 八皇后问题解法
- 八皇后问题解法
- 八皇后问题解法
- 八皇后问题的递归解法
- 八皇后问题的位操作解法
- 八皇后问题的两种解法
- 八皇后问题的一种解法
- 关于八皇后问题的解法
- 八皇后问题的解法一
- 八皇后问题的全排列解法
- 八皇后问题的非递归解法
- 经典问题“八皇后”的解法
- 八皇后问题的两种解法
- "八皇后"问题的解法(1)
- 八皇后问题的分析与解法
- “八皇后问题”的 Python 语言解法
- 第02章 IntelliJ IDEA起步 熟悉IntelliJ IDEA用户界面 04 导航条
- opengl 相机 视口 详解
- Delphi EmbeddedWB组件遍历Frames并执行子frame的js
- ASP.NET重定向_第四篇_ASP.NET 网页之间传递值
- 几种常见的查找算法
- 八皇后问题的解法
- 消除列表的重复数
- utu2440_button实验小结
- 常见排序算法总结
- 坐圈问题求解
- PHP面向对象的的三大特性之继承性
- 第02章 IntelliJ IDEA起步 熟悉IntelliJ IDEA用户界面 05 状态条
- jiahou diyitian
- hdu 1564 证明