首页 > 代码库 > 初学者看待八皇后问题
初学者看待八皇后问题
(原创,未经允许不得转载) 经典的八皇后问题
题目:
八皇后问题就是在8*8的棋盘上放置8个皇后,使其任意两个不在同一行、同一列、同一斜线上。
解题思路:
去掉行这个因素,然后去考虑是否在同一列或同一斜线上。每个摆放成功的棋子在(i,x[i]),然后设置当前行,然后在该行从第一列一直试探到第8列,看是否符合条件,同时只有当当前行之前的棋子都符合条件,才能继续下一行,直到第八行,进行输出。
代码:
#include "stdafx.h" #include "iostream" using namespace std; 命名空间 int n=8,count=0; int x[8]; 数组的个数不能用字母n代替,应该用数字,要用字母的话得用#define 定义 void print(){ 输出八皇后函数 for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ 嵌套循环 if(j==x[i]) 当该列是棋子所在的第x[i]列时输出1 cout<<"1"<<" "; else cout<<"0"<<" "; } cout<<endl; } cout<<"---------"<<endl; } void eight_queen(int r){ if(r==n){ print(); count++; return; return从当前方法即eight_queen中退出返回到该调用方法即主函数的语句处,继续执行。如果不返回值时,方法类型必须为void;方法前有返回类型,则必须返回值,但如果是void,即使写了值也不能返回数值。 } for(int i=0;i<n;i++){ x[r]=i; int ok=1; for(int j=0;j<r;j++){ if(r-x[r]==j-x[j]||r+x[r]==j+x[j]||x[j]==x[r]) { ok=0; if不加花括号只能管到一行,不符合条件,ok覆盖上面的值,变为0. break; } } if(ok) eight_queen(r+1); } } int main(int argc, char* argv[]) { eight_queen(0); cout<<"count="<<count<<endl; return 0; }
初学者看待八皇后问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。