- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个程序,该程序读取整数值 (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/
降本手段一招鲜,增效方法吃遍天; 01 互联网行业里; 降本策略千奇百怪,手段却出奇一致;增效方法五花八门,手段更是花里胡哨; 对于企业来说;
有什么方法可以使用 angularjs 中的部分进行代码分组吗? 原因 --- 我的 Controller 包含太多代码。该 Controller 包含了多个方法和大量功能的代码,降低了代码的可读性。
不幸的是,我的数据库的数据模型必须改变,所以我正在寻找最轻松的方式来迁移我的数据。 此时情况如何: create table cargo{ id serial primary key, per
在 QTextEdit 对象中,假设我想知道字符在鼠标光标下的位置。 我会写... void MyQTextEditObject::mousePressEvent(QMouseEvent* mouse
是否可以在 C++ 中返回一个 return 语句或做一些具有类似功能的事情? 例如,如果代码中有几个函数将指针作为输入,并且每个函数都检查指针是否为 nullptr,这将很方便。如果它是一个 nul
我的 PC 上有一个控制台应用程序,它是 signalR 服务器。 我有一个 html 页面,它是互联网上的 signalR 客户端。但我尝试连接服务器,但我有一个错误的请求 400 错误。如果服务器
我想将应用程序作为后台进程运行。当点击应用程序图标时,它不会显示任何 View ,只会启动后台进程。 最佳答案 对于 iOS 这是不可能的,但是对于 android,react native 有 he
我知道有(昂贵的)框架可以让你在 VS C# 中编写 android 应用程序并将其编译为 android apk。 我也知道,可以在 VS 中编写 Java 应用程序(link)。 是否有可能,甚至
我在做: can :manage, :all if user.role == 'admin' can :approve, Anuncio do |anuncio| anuncio.try(:apr
我是一名优秀的程序员,十分优秀!