标签:code 返回值 void efi 调用 八皇后问题 log 数组 设置
(原创,未经允许不得转载) 经典的八皇后问题
题目:
八皇后问题就是在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; }
标签:code 返回值 void efi 调用 八皇后问题 log 数组 设置
原文地址:http://www.cnblogs.com/liu-ning/p/6442283.html