#include <stdio.h>
#include <string.h>
char pos[300]; /* pos[i] = j表示第i行上的皇后放在第j列 */
int n;
int count;
/* 寻找第i行的皇后可以放的位置,不能放则令pos[row]等于-1 */
void find (int row)
{
int i, j, k;
char ok;
if (row == n) {
printf("第%d种解决方案: ", ++count);
for (k = 0; k < n; k++) {
printf("%d ", pos[k]);
}
printf("\n");
return;
}
/* 试探所有列 */
for (i = 0; i < n; i++) {
ok = 1; /* 先假设第i列可以放 */
for (j = 0; j < row; j++) { /* 一旦检查到与放好的皇后攻击,则不让放 */
if (pos[j] == i || abs(pos[j]-i) == abs(j-row)) {
ok = 0;
break;
}
}
if (ok) {
pos[row] = i;
find(row+1);
}
}
}
int main()
{
int i, j;
while (scanf("%d", &n), n) {
count = 0;
find(0);
}
}
分享到:
相关推荐
我用二维数组代表棋盘,用户输入棋盘的维度N,程序输出所有合法布局以及布局的个数。也就是说,几皇后,程序都可以输出合法布局以及个数。输入0,结束程序。 代码非常简单易懂,注释很全,与网上的不同,没有用指针...
本资源是数据结构中利用非递归法实现n皇后问题的一个C++代码,仅供参考,欢迎指正
**回溯递归在解决N皇后问题中的应用** N皇后问题是一个经典的计算机科学问题,源自于19世纪的数学家高斯提出的八皇后问题。它要求在N×N的棋盘上放置N个皇后,使得任意两个皇后都无法互相攻击,即任意两个皇后不在...
### 递归解决N皇后问题 #### 一、问题背景 N皇后问题是一个经典的问题,在一个N×N的棋盘上摆放N个皇后,要求所有皇后彼此之间不能互相攻击(即任意两个皇后不能处于同一行、同一列或相同的对角线上)。此问题不仅...
在C语言实现中,"n皇后问题.cpp"和"N皇后非递归.cpp"文件可能分别包含了递归和非递归的代码实现。这些代码通常包含定义棋盘结构、检查冲突、放置皇后、回溯等核心函数。通过阅读和理解这些代码,你可以更深入地了解...
N皇后问题是一个经典的计算机科学问题,...总的来说,C语言实现的非递归N皇后问题解法避免了递归可能导致的栈溢出问题,同时减少了空间需求。这种方法虽然简单,但能够有效地解决问题,体现了算法设计的简洁性和效率。
N后问题,用非递归的方式去求解。
本资源是数据结构中利用递归法实现n皇后问题的一个C++代码,仅供参考,希望大家指正问题
算法设计:对于八皇后的拓广,使用递归实现n皇后要求在广义的n*n方格棋盘上放置n个皇后,使它们互不攻击,共有多少种不同的放置方式?试分别求出n皇后的各个解。
用递归回溯和非递归的回溯实现N皇后问题。
在本例中,我们关注的是一个经典的计算机科学问题——n皇后问题。n皇后问题是一个在n×n棋盘上放置n个皇后,使得皇后之间不能互相攻击的问题。这里的“攻击”指的是皇后可以沿着行、列或对角线攻击到其他皇后。 n...
### N皇后问题实验报告知识点解析 ...通过本实验,学生不仅能够深入了解N皇后问题的算法原理,还能够掌握如何利用递归和回溯技术来解决问题。此外,通过实际编程操作,还能进一步提高学生的逻辑思维能力和编程技巧。
### N皇后问题递归算法详解 #### 一、问题背景及定义 N皇后问题是一个经典的计算机科学问题。问题描述为:在N×N的棋盘上放置N个皇后,要求这些皇后不能处于同一行、同一列或者相同的对角线上。简而言之,就是寻找...
数据结构课程设计N皇后问题 ,是表弟写的 很不错 ^_^
给定n×n的棋盘(假定n=4),用递归算法求出n个皇后全部的放置方法。每个皇后的位置用(k, x(k))表示,k表示行号,x(k)表示列号。为方便起见,输出结果的行号和列号都从1开始。将计算出的n个皇后的全部放置方法分行...
print(int n):输出一个解。 place(int k ,int j):测试(k,j)位置能否摆放皇后
**总的来说,利用回溯法解决n皇后问题,关键在于理解回溯算法的原理,正确地设计递归函数,以及有效地实施剪枝策略。通过C++编程,我们可以将这些思想转化为可执行的代码,并在VC6.0环境下进行测试和调试。**
《n皇后非递归C++实现详解》 ...总结,n皇后问题的非递归C++实现主要依赖于回溯算法,通过迭代方式生成所有可能的皇后布局并检查其合法性。理解和实现这种解决方案不仅可以提高编程技能,还能深化对算法思维的理解。
**C语言解决n皇后问题详解** n皇后问题是一个经典的回溯法问题,它涉及到在n×n的棋盘上放置n个皇后,使得任意两个皇后都不能在同一行、同一列或同一对角线上。以八皇后问题为例,即在8×8的棋盘上放置8个皇后,找...
N皇后问题,回溯法,递归