gpt4 book ai didi

c - 检查所有可能值的递归方法(C)

转载 作者:行者123 更新时间:2023-11-30 17:24:07 25 4
gpt4 key购买 nike

我正在编写一个程序,该程序读取整数值 (n),并使用这些维度 (nXn) 创建一个国际象棋表。然后我必须看看是否有一种方法可以将 n 个皇后放在棋盘上,这样它们就不能互相攻击(对于那些不熟悉国际象棋的人来说,皇后可以攻击同一列中的任何棋子)或像它们一样划行,以及位于穿过皇后的对角线上的任何棋子)。这些值存储在一个数组 (int board[n]) 中,该数组最初设置为全 -1。 board[0] 中的值将对应于第 0 列中的皇后所在的行。最初,所有值都设置为 -1,这意味着该行中没有棋子。

我正在尝试找到一种方法,通过一种方法来检查是否可以传递每个可能的坐标集(本质上是长度为 n 的每个可能的数组,其值可以在 0 到 n-1 之间)这是布局各个部分的有效方法,如果有一个有效的布局,它必须将该数组传递给可视化它的方法,如下所示:

* * Q *
Q * * *
* * * Q
* Q * *

检查和输出的方法已设置并正常工作,我只需要弄清楚如何生成存储该坐标的数组的所有可能的排列。

编辑:以下是迄今为止的代码(12 月 6 日下午 2 点更新):

#include <stdio.h>
#include <stdlib.h>
int permutations (int board[],int n, int counter, int index);
int check (int board[], int n);
int printout (int board[], int n, int isValid);
int main() {
int n, board[n];
while (1==scanf("%d", &n) && n > 0) {
int board[] = {-1};
int isValid = permutations(board,n, 0, 0);
printout(board, n, isValid);
}
return 0;
}
int permutations(int board[],int n, int counter, int index){
board[index] = counter;
int max = n-1;
if ((check(board, n) == 1) && (index == max)){
return 1;
}
if (check(board, n) == 1){
permutations(board, n, 0, ++index);
}
else if (check(board, n) == 0){
counter++;
}
if (counter == n){
return 0;
}
}
int check(int board[], int n){
int i,j;
int isValid = 1;
for (i=0; i<n && isValid; ++i) {
if (board[i]==-1) continue;
for (j=i+1; j<n && isValid; ++j) {
if (board[j]==-1) continue;
if ( board[i] == board[j] ||
board[i]-board[j] == i-j ||
board[i]-board[j] == j-i )
isValid = 0;
}
}
return isValid;}
int printout(int board[], int n, int isValid){
int i,j;
putchar('\n');
for (i=n-1; i>=0; --i) {
for (j=0; j<n; ++j) {
if (j>0) putchar(' ');
putchar( board[j]==i ? 'Q' : '.' );
}
putchar('\n');
}
puts( isValid ? "valid configuration" : "invalid configuration" );
return 0;
}

最佳答案

作业提示(递归):

从一个空板开始并调用您的递归例程。迭代棋盘,尝试在上面放一个皇后。如果受到攻击则继续。否则称自己为董事会成员(现在又多了一位女王)。迭代棋盘,尝试在上面放一个皇后。如果受到攻击则继续。否则称自己...

如果已达到 6 个皇后,则返回“成功”并展开递归。

如果在任何时候您都无法在棋盘上放置另一个皇后,请返回“失败”,删除皇后并从您自己调用的位置继续迭代。

这是一种“暴力”方法。

关于c - 检查所有可能值的递归方法(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27324073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com