`
kenby
  • 浏览: 724205 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归求N皇后问题

阅读更多

 

#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);
	}
}
分享到:
评论

相关推荐

    0积分下载C语言递归实现N皇后问题

    我用二维数组代表棋盘,用户输入棋盘的维度N,程序输出所有合法布局以及布局的个数。也就是说,几皇后,程序都可以输出合法布局以及个数。输入0,结束程序。 代码非常简单易懂,注释很全,与网上的不同,没有用指针...

    非递归法实现n皇后问题

    本资源是数据结构中利用非递归法实现n皇后问题的一个C++代码,仅供参考,欢迎指正

    N皇后经典算法--回溯递归

    **回溯递归在解决N皇后问题中的应用** N皇后问题是一个经典的计算机科学问题,源自于19世纪的数学家高斯提出的八皇后问题。它要求在N×N的棋盘上放置N个皇后,使得任意两个皇后都无法互相攻击,即任意两个皇后不在...

    递归解决N皇后

    ### 递归解决N皇后问题 #### 一、问题背景 N皇后问题是一个经典的问题,在一个N×N的棋盘上摆放N个皇后,要求所有皇后彼此之间不能互相攻击(即任意两个皇后不能处于同一行、同一列或相同的对角线上)。此问题不仅...

    N皇后求解问题——递归和回溯方法

    在C语言实现中,"n皇后问题.cpp"和"N皇后非递归.cpp"文件可能分别包含了递归和非递归的代码实现。这些代码通常包含定义棋盘结构、检查冲突、放置皇后、回溯等核心函数。通过阅读和理解这些代码,你可以更深入地了解...

    C语言实现N皇后问题非递归求解

    N皇后问题是一个经典的计算机科学问题,...总的来说,C语言实现的非递归N皇后问题解法避免了递归可能导致的栈溢出问题,同时减少了空间需求。这种方法虽然简单,但能够有效地解决问题,体现了算法设计的简洁性和效率。

    N皇后问题非递归算法

    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×N的棋盘上放置N个皇后,要求这些皇后不能处于同一行、同一列或者相同的对角线上。简而言之,就是寻找...

    数据结构课程设计N皇后问题

    数据结构课程设计N皇后问题 ,是表弟写的 很不错 ^_^

    皇后问题递归求解

    给定n×n的棋盘(假定n=4),用递归算法求出n个皇后全部的放置方法。每个皇后的位置用(k, x(k))表示,k表示行号,x(k)表示列号。为方便起见,输出结果的行号和列号都从1开始。将计算出的n个皇后的全部放置方法分行...

    用递归方法求解n皇后问题

    print(int n):输出一个解。 place(int k ,int j):测试(k,j)位置能否摆放皇后

    利用回溯法解决n皇后问题

    **总的来说,利用回溯法解决n皇后问题,关键在于理解回溯算法的原理,正确地设计递归函数,以及有效地实施剪枝策略。通过C++编程,我们可以将这些思想转化为可执行的代码,并在VC6.0环境下进行测试和调试。**

    n皇后非递归 c++源码实现

    《n皇后非递归C++实现详解》 ...总结,n皇后问题的非递归C++实现主要依赖于回溯算法,通过迭代方式生成所有可能的皇后布局并检查其合法性。理解和实现这种解决方案不仅可以提高编程技能,还能深化对算法思维的理解。

    C语言解决n皇后问题 例如八皇后问题 列出所有解的情况

    **C语言解决n皇后问题详解** n皇后问题是一个经典的回溯法问题,它涉及到在n×n的棋盘上放置n个皇后,使得任意两个皇后都不能在同一行、同一列或同一对角线上。以八皇后问题为例,即在8×8的棋盘上放置8个皇后,找...

    N皇后递归回溯算法.c

    N皇后问题,回溯法,递归

Global site tag (gtag.js) - Google Analytics