首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用C语言写一段N皇后问题的代码,内附完整代码。

大家好,我是贤弟!

一、什么是N皇后问题?

N皇后问题是一个经典的计算机科学问题,它的目标是在NxN的棋盘上放置N个皇后,使得这些皇后相互之间无法攻击对方。

按照国际象棋的规则,皇后可以攻击与之处在同一行、同一列或同一斜线上的棋子。

因此,在棋盘上放置皇后时需要考虑这些限制条件,使得每个皇后所在的行、列、斜线都没有其他皇后存在。

求解N皇后问题的原理是穷举法,通过递归的方式从第一行开始,尝试将皇后放置到每一列中,并判断是否符合要求,如果符合则进入下一行进行操作,如果不符合则回溯到上一行重新选择位置。通过反复尝试所有的可能性,直到找到所有合法的解决方案。

二、用C语言实现N皇后问题

#include#include int Place(int (*arr)[20], int row, int col, int n) // 判断在此列是否能放置皇后{ for(int i = 0; i < row; i++) { if(arr[i][col] == 1) // 判断在此列上是否已经有其他皇后了 return 0; if(row - i >= 1 && col - i >= 1) if(arr[row - i - 1][col - i - 1] == 1) // 判断左上角斜线上是否已经有其他皇后 return 0; if(row - i >= 1 && col + i < n) if(arr[row - i - 1][col + i] == 1) // 判断右上角斜线上是否已经有其他皇后 return 0; } return 1;} void Print(int (*arr)[20], int n) // 打印结果{ static int num = 1; printf("Result %d: \n", num++); for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) printf("%d ", arr[i][j]); printf("\n"); }} void Queen(int (*arr)[20], int row, int n) // 求解 N 皇后问题{ if(row == n) { Print(arr, n); return; } for(int i = 0; i < n; i++) { if(Place(arr, row, i, n)) { arr[row][i] = 1; // 标记当前位置可以放置皇后 Queen(arr, row + 1, n); // 继续放置下一行皇后 arr[row][i] = 0; // 取消当前位的标记,回溯到上一行的状态 } }} int main(){ int n; printf("Please enter a number: "); scanf("%d", &n); int arr[20][20] = {0}; Queen(arr, 0, n); return 0;}

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OXMAzFPeBhr41qttN19ULBqA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券