#include<iostream>
#include<vector>
using namespace std;
int dir_x[8] = { -1, -1, -1, 1, 1, 1, 0, 0 };
int dir_y[8] = { 0 , 1, -1, 0, 1,-1, 1,-1 };
void copy_attack(int(*attack)[8], int(*temp)[8]);
void update_attack(int(*attack)[8], int i, int k);
void ini_att_que(int (*attack)[8], char (*queen)[8]);
void backtrack(int n, int(*attack)[8], char(*queen)[8]);
int counts;
int main()
{
int attack[8][8];
char queen[8][8];
ini_att_que(attack, queen);
backtrack(0, attack, queen);
cout << "八皇后问题一共有" << counts << "种解法。" << endl;
return 0;
}
void ini_att_que(int (*attack)[8], char (*queen)[8])
{
for (int i = 0; i < 64; i++)
*(*attack + i) = 0;
for (int i = 0; i < 64; i++)
*(*queen + i) = '#';
}
void backtrack(int n, int(*attack)[8], char(*queen)[8])
{
if (n == 8)
{
for (int i = 0; i < 8; i++)
{
for (int k = 0; k < 8; k++)
printf("% c ", queen[i][k]);
cout << endl;
}
printf("=====================================\n");
counts++;
return;
}
for (int col = 0; col < 8; col++)
{
if (attack[n][col] == 0)
{
int temp[8][8];
copy_attack(attack,temp);
queen[n][col] = 'Q';
update_attack(attack, n, col);
backtrack(n + 1, attack, queen);
copy_attack(temp, attack);
queen[n][col] = '#';
}
}
}
void copy_attack(int(*attack)[8],int(*temp)[8])
{
for (int i = 0; i < 8; i++)
{
for (int k = 0; k < 8; k++)
temp[i][k] = attack[i][k];
}
}
void update_attack(int(*attack)[8],int i,int k)
{
for (int m = 1; m < 8; m++)
{
for (int g = 0; g < 8; g++)
{
int nx = i + m * dir_x[g];
int ny = k + m * dir_y[g];
if (nx >= 0 && nx < 8 && ny >= 0 && ny < 8)
{
attack[nx][ny] = 1;
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术