当前位置: 首页 > news >正文

N皇后问题

 

 

#include<iostream>
#include<string>
#include<vector>
using namespace std;
#define MAX 20//最大20个皇后
int n ;//实际皇后个数
int sum ;//答案个数
vector<vector<int>> attack(MAX, vector<int>(MAX, 0));//标记攻击位置
vector<vector<char>>queen(MAX,vector<char>(MAX,'.'));//存放皇后的位置void put_queen(int x, int  y)
{int dx[] = { -1,-1,-1,0,1,1,1,0 };int dy[] = { -1,0,1,1,1,0,-1,-1 };attack[x][y] = 1;//将皇后位置标记为1for (int i = 1; i < attack.size(); i++){for (int j = 0; j < 8; j++)//8个方向{int xx = x + i * dx[j];int yy = y + i * dy[j];if (xx >= 0 && xx < attack.size() && yy >= 0 && yy < attack.size()){attack[xx][yy] = 1;//将皇后攻击到的地方标记为1}}}
}void Backtrack(int k)//第k行,数量是n个
{if (k > n - 1)//找到一组解{sum = sum + 1;cout << endl;for (int a = 0; a < n; a++){for (int b = 0; b < n; b++){cout << queen[a][b] << " ";}cout << endl;}cout << endl;return;}for (int i = 0; i < n; i++){if (attack[k][i] == 0)//判断当前第k行i列是否可以放皇后{vector<vector<int>>tmp = attack;queen[k][i] = 'Q';put_queen(k, i);//更新皇后攻击范围Backtrack(k + 1);queen[k][i] = '.';//回溯attack = tmp;//回溯}}
}int main()
{cout << "请输入皇后数量:" << endl;cin >> n;sum= 0;Backtrack(0);cout << "答案个数:" << sum<<endl;return 0;
}

 

http://www.lryc.cn/news/15564.html

相关文章:

  • 强化学习DQN之俄罗斯方块
  • 1.3总线:并行总线、串行总线、单工、半双工、全双工、总线宽度、总线带宽、总线的分类、数据总线、地址总线、控制总线
  • Linux驱动开发—设备树开发详解
  • 深入浅出C++ ——继承
  • 设计模式C++实现20: 桥接模式(Bridge)
  • Android中的Rxjava
  • 【RocketMQ】源码详解:消息储存服务加载、文件恢复、异常恢复
  • 数字IC设计工程师是做什么的?
  • 【040】134. 加油站[简单模拟 + 逻辑转化]
  • Python用selenium实现自动登录和下单的脚本
  • (02)Cartographer源码无死角解析-(55) 2D后端优化→AppendNode()、class MapById、 PoseGraphData、
  • 如何在jmeter中把响应中的数据提取出来并引用
  • 2023环翠区编程挑战赛中学组题解
  • 手撸一个Switch开关组件
  • 2023年1月冰箱品牌销量排行:销量环比增长26%,销售额36亿+
  • DSP CCS 开发问题总结及解决办法
  • Vue3.x+Element Plus仿制Acro Design简洁模式分页器组件
  • 经典文献阅读之--VoxelMap(体素激光里程计)
  • .NET6中使用GRPC详细描述
  • ML@矩阵微积分基础
  • 华为OD机试真题Python实现【优秀学员统计】真题+解题思路+代码(20222023)
  • docsify在线文档支持pdf查看
  • ES6中Set类型的基本使用
  • 【VUE3.0_CSS功能】
  • 微机原理复习总结6:汇编语言程序设计
  • 计算机网络 部分原理和过程
  • C++实现链表
  • MySQL索引篇
  • Ardiuno-交通灯
  • Leetcode.1234 替换子串得到平衡字符串