方法一:

//N_Queen
#include<iostream>
using namespace std;
#define N 100       //定义最多求解100皇后问题
int x[N];           //存放N皇后问题的解
//判断皇后K放在x[k]列是否冲突
int Place(int k) {for(int i = 0; i < k; i++) {if(x[i] == x[k] || abs(i - k) == abs(x[i] - x[k]))  //违反约束条件return 1;       //冲突,返回1}return 0;           //不冲突,返回0
}
//打印N皇后问题的一个解
void PrintQueen(int n) {for(int i = 0; i < n; i++) {printf("%5d", x[i] + 1);    //数组下标从0开始,打印要求序号从1开始}printf("\n");
}
//回溯法求解
void Queen(int n) {int k = 0, num = 0; //num存储解的个数while (k >= 0)      //摆放皇后k,注意0<=k<n{x[k]++;         //在下一列摆放皇后kwhile (x[k] < n && Place(k) == 1 ) {    //发生冲突x[k]++;                 //皇后K试探下一列}if(x[k] < n && k == n - 1) {    //得到一个解,输出printf("第%d个解是:", ++num);PrintQueen(n);} else if (x[k] < n && k < n - 1) { //尚有皇后未摆放k = k + 1;                      //准备摆放下一个皇后} else {x[k--] = -1;                    //重置x[k],回溯,重新摆放下一个皇后k}        }
}
int main() {int i , n;printf("请输入皇后的个数:");scanf("%d", &n);for(int i = 0; i < n; i++) {x[i] = -1;}Queen(n);system("pause");return 0;
}

方法二:

摘自百度百科https://baike.baidu.com/item/%E5%85%AB%E7%9A%87%E5%90%8E%E9%97%AE%E9%A2%98/11053477?fr=aladdin

#include <iostream>
using namespace std;const int N = 8;
int arr[10], total_cnt;
// arr记录每一行(X)皇后的Y坐标bool isPlaceOK(int *a, int n, int c) {for (int i = 1; i <= n - 1; ++i) {if (a[i] == c || a[i] - i == c - n || a[i] + i == c + n)return false;//检查位置是否可以放//c是将要放置的位置//a[i] == c如果放在同一列,false//a[i] -+ i = c -+ n 如果在对角线上,false}return true;
}void printSol(int *a) {for (int i = 1; i <= N; ++i) { //遍历每一行for (int j = 1; j <= N; ++j) { //遍历每一列cout << (a[i] == j ? "X" : "-") << " ";;} //如果标记数组中这一行的皇后放在j位置,则输出X,否则输出-,//用空格分隔cout << endl; //每一行输出一个换行}cout << endl; //每一组数据一个换行分隔
}void addQueen(int *a, int n) {if (n > N) { //n代表从第一行开始放置printSol(a);total_cnt++;return ;}for (int i = 1; i <= N; ++i) { //i从第1列到第N列遍历if (isPlaceOK(a, n, i)) {a[n] = i; //如果可以放置,就把皇后放在第n行第i列addQueen(a, n + 1);}}}int main() {addQueen(arr, 1);cout << "total: " << total_cnt << " solutions.\n";return 0;
}

有时间我会补充一下注释,大家可以先自己理解理解

八皇后问题(回溯法)C语言求解相关推荐

  1. 八皇后问题 回溯法hdu2553

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. n皇后问题-回溯法求解

    n皇后问题-回溯法求解 1.算法描述 在n×n格的国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. n皇后是由八皇后问题演变而来的.该问题 ...

  3. 回溯法(backtracking algorithm)求解N皇后问题(N-Queens puzzle)

    转载自:用回溯法(backtracking algorithm)求解N皇后问题(N-Queens puzzle) N皇后问题 八皇后问题,是一个古老而著名的问题.该问题是国际西洋棋棋手马克斯·贝瑟尔于 ...

  4. Bailian2754 八皇后【回溯】

    2754:八皇后 总时间限制: 1000ms 内存限制: 65536kB 描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格) ...

  5. 回溯法(八皇后问题)及C语言实现

    回溯法,又被称为"试探法".解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择.这种走不通就回退再走的 ...

  6. [C语言]八皇后问题回溯算法

    八皇后问题:在8×8格的国际象棋上摆放八个皇后,任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 将棋盘抽象为4 * 4到20 * 20大小的矩阵 输入样例: 请输入棋盘的大小(4 ...

  7. 八皇后问题、N皇后问题回溯法详解

    /* * 回溯法解N皇后问题 * 使用一个一维数组表示皇后的位置 * 其中数组的下标表示皇后所在的行 * 数组元素的值表示皇后所在的列 * 这样设计的棋盘,所有皇后必定不在同一行 * * 假设前n-1 ...

  8. Bailian2698 八皇后【回溯】

    2698:八皇后问题 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和格式输出所有 ...

  9. n皇后问题(回溯法)

    目录 1.问题描述 2.问题分析 3.完整源码 1.问题描述 八皇后问题是十九世纪著名的数学家高斯于1850年提出的.问题是:在8×8的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同 ...

  10. PHP实现八皇后算法-回溯算法

    回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径.回溯法是一种选优搜索法,按选优条件向前搜索,以 ...

最新文章

  1. java系统高并发解决方案
  2. springside / springside4—CRUD页面教程
  3. 数据结构--Dijkstra算法最清楚的讲解
  4. 初入Linux,M35作业第一弹,500字感想
  5. Spring Boot Web Slice测试–示例
  6. ubuntu所有php扩展php-7.0扩展列表
  7. html dom 知乎,知乎登录页 - 粒子运动效果
  8. javascript Array学习与使用
  9. python请简述构造函数和析构函数的作用_python – 构造函数和析构函数如何工作?...
  10. 填充table_Excel Power Query | 向下填充的逆过程
  11. 括弧匹配检验(信息学奥赛一本通-T1354)
  12. linux配置sonarqube遇到的坑
  13. apache java cache-control,Tomcat: Cache-Control
  14. android 70 使用ListView把数据显示至屏幕
  15. linux下如何查看二进制文件,Linux二进制文件的查看方法
  16. Matlab fftshift 详解
  17. 能上天的代码? NASA 火星无人机飞行控制系统开源了
  18. ios 制作方形头像
  19. canvas画圆和线条动画
  20. 看日光穿过手指 享受芬芳的下午茶

热门文章

  1. 微信小程序快速开发上手
  2. 对数据库进行先查询后插入的解决方案
  3. 关于android Intent意图的一点心得
  4. 每个人都有属于自己的机会
  5. Android UI的优化
  6. 自然语言处理之关键词提取TF-IDF
  7. 删除一个非空的无用表空间
  8. XV6陷入,中断和驱动程序
  9. 【bzoj2084】[Poi2010]Antisymmetry
  10. JavaScriptjQuery.动态删除元素