回溯算法

  • N皇后
  • 数独解法

N皇后

#include <bits/stdc++.h>
using namespace std;int N;
int queenpos[100];//第几列的值
void Nqueen(int k)
{int i;if (k == N){for (i = 0; i < N; i++){cout << queenpos[i] + 1 << " ";}cout << endl;return;}for (i = 0; i < N; i++){int j;for (j = 0; j < k; j++){if (queenpos[j] == i||abs(queenpos[j]-1)==abs(k-j)){break;}}if (j == k){queenpos[k]=i;Nqueen(k+1);}}
}int main()
{cin >> N;Nqueen(0);return 0;
}

这种解法很抽象,但是代码很简洁,将回溯看成一棵树,n皇后就是深度为n的树然后逐层检查合理性。

数独解法

#include <bits/stdc++.h>
using namespace std;bool isValid(int board[9][9], int row, int col, int k)//判断
{for (int i = 0; i < 9; i++){if (board[i][col] == k)return false;}for (int i = 0; i < 9; i++){if (board[row][i] == k)return false;}int startrow = (row / 3) * 3;int startcol = (col / 3) * 3;for (int i = startrow; i < startrow + 3; i++){for (int j = startcol; j < startcol + 3; j++){if (board[i][j] == k)    return false;}}return true;
}bool backtracking(int board[9][9])
{for (int i = 0; i < 9; i++){for (int j = 0; j < 9; j++){if (board[i][j] != 0) continue;//碰到已经填入的数字就跳过for (int t = 1; t <= 9; t++){if (isValid(board, i, j, t)){board[i][j] = t;if (backtracking(board))   return true;}board[i][j] = 0;}return false;}}return true;
}int main()
{int board[9][9];for (int i = 0; i < 9; i++)//输入九宫格{for (int j = 0; j < 9; j++){cin >> board[i][j];}}backtracking(board);for (int i = 0; i < 9; i++){for (int j = 0; j < 9; j++){cout << board[i][j]<<" ";}cout << endl;}
}

这个算法的backtracking函数要用bool做返回值,这样才能判断是否找到正确的数字。

数独解法/n皇后的回溯算法相关推荐

  1. n皇后问题python_N皇后问题—回溯算法经典例题

    N 皇后是回溯算法经典问题之一.问题如下:请在一个 ni n 的正方形盘面上布置 n 名皇后,因为每一名皇后都可以自上下左右斜方向攻击,所以需保证每一行.每一列和每一条斜线上都只有一名皇后. 最简单的 ...

  2. java递归-八皇后问题(回溯算法)

    1.八皇后问题介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任 ...

  3. [Leetcode][第81题][JAVA][N皇后问题][回溯算法]

    [问题描述][困难] [解答思路] 1. 主副对角线列 标记 复杂度 import java.util.ArrayDeque; import java.util.ArrayList; import j ...

  4. 51. N 皇后(回溯算法)

    n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案. 每一种解法包含一个不同的 n 皇后问 ...

  5. leetcode51. N 皇后(回溯算法)

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案. 每一种解 ...

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

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

  7. 回溯算法 | 追忆那些年曾难倒我们的八皇后问题

    文章收录在公众号:bigsai 更多精彩干货敬请关注! 前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 第一次遇到它的时候应该 ...

  8. 八皇后时间复杂度_回溯算法 | 追忆那些年曾难倒我们的八皇后问题

    文章收录在公众号:bigsai,关注更多干货和学习资源 记得点赞.在看 前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 在这里 ...

  9. 多字段回溯 mysql_回溯算法 | 追忆那些年曾难倒我们的八皇后问题

    前言 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题-- 在这里插入图片描述 第一次遇到它的时候应该是大一下或者大二这个期间,这个时间对 ...

  10. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...

最新文章

  1. 这款多线程中间件,吊打 Redis!
  2. 直播预告│据说这是人工智能领域里最难的一门学问……
  3. Cert manager自动签发/更新证书
  4. (一)Web Service——基本概念
  5. java路径怎么找_Java路径怎么找
  6. All in Linux:一个算法工程师的IDE断奶之路
  7. JavaSE——常用类库(上)(泛型、Objects、Math、ArraysBigDecimal类)
  8. html照片从模糊到清晰的渐变加载显示方法
  9. Microsoft Visual Studio 2008从试用版转为正式版
  10. APP测试之使用ADB可能遇到的错误及解决办法
  11. c语言编程 六个评委打分,有人知道这怎么写吗?谢谢程序填空题,下面程序的功能是 9 个...
  12. 安装freetds小记
  13. 金蝶云苍穹平台初级开发工程师认证考试
  14. python发微信工资条_我帮公司财务写了个“群发工资条”的Python脚本!
  15. 使用SVG画一个罗盘
  16. 5G核心网技术基础自学系列 | 5G无线网
  17. 三相直流无刷电机驱动
  18. 实用命令-pv: 管道查看器
  19. Open Source
  20. JDBC心得体会--总结

热门文章

  1. Unity3D音效问题
  2. OpenCV4.3 Java 编程入门:Core 组件中的数据结构与方法
  3. 从零开始一套完整的短视频运营方案,想做抖音快手短视频的速来观摩。
  4. 生物信息学二级计算机,生物信息学-张红-第二章-计算机基础
  5. js获取本月第一天和当前时间
  6. python模拟火车订票系统_Python-模拟火车票12306网站登陆
  7. 只需5步,新手小白如何创建实用的在线员工手册?
  8. GO语言04(简单的RESTful API服务器,API 服务器健康状态自检)
  9. 计算机专业调剂化学专业,汕头大学计算机化学专业2015年考研调剂信息
  10. HTML前端连接go语言后段,一次完整的浏览器请求响应过程-Go语言中文社区