J q data:不理解伪码:(Q[i]=j+r− i)或(Q[i]=j− r+i)

我正在阅读 Jeff Erickson 的算法书“算法”(第一版)。

书在:https://github.com/jeffgerickson/algorithms/blob//1st%20edition/Algorithms-JeffE.pdf

在图 2.2 有伪代码:

PlaceQueens(Q[1 .. n], r):
    if r = n + 1
        print Q[1 .. n]
    else
        for j ← 1 to n
            legal ← True
            for i ← 1 to r − 1
                if (Q[i] = j) or (Q[i] = j + r − i) or (Q[i] = j − r + i)
                    legal ← False
            if legal
                Q[r] ← j
                PlaceQueens(Q[1 .. n], r + 1)    〈〈 Recursion! 〉〉

我知道(或猜测)“(Q [i] = j + r-i)或(Q [i] = j-r + i)”用于判断它是否在对角线上。

但是我不知道如何得到 Q [i] = j + r-i 和 Q [i] = j-r + i。

我可以使用斜率得到 Q [i] = j + r-i(或 Q [i] = j-r + i)关系?

有人帮忙吗?

1
Q[i] indicates which square in row i contains a queen.

所以我们需要检查,对于每一行,如果行“向上和向左”和“向上和向右”包含皇后。

j是我们试图放置女王的位置(不能保证它是合法的)。

r是我们到目前为止放置的当前皇后数量(r = 我们当前的皇后行)。

i是我们的迭代器,它遍历每个现有的 queen 行,并检查我们的新 queen 是否合法。请注意,只有这一点因我们尝试的每个位置而异。

因此,每次我们想要计算与当前皇后对角的值,并查看另一个皇后是否在该列中。

Q [i] = j r-i 表示查看第 i 行(1 到皇后数)。检查该皇后是否在通过采用新皇后的位置(j)并添加(r-i)表示的列中,这是我们需要采取的“向右”步数。例如,如果我们要添加四号皇后,我们将通过增加三号和三号来检查第一行中的对角皇后。

然后,我们做同样的事情,但在相反的垂直方向(左上),通过采取我们的新女王的位置(j)和减去(r + i)。

我建议把这个算法画在纸上。一个接一个地添加每个女王,并跟踪算法每一步的所有数字。这应该使算法清晰。

Q = [1, 3]
[
.Q..
...Q
]
say j = 2, r = 2
Trying to add here:
[
.Q..
...Q
..?.
]
i = 0:
  Q[0] == j + r − i -> 2 + 2 - 0 = 4 FALSE
  Q[0] == j - r + i -> 2 - 2 + 0 = 0 FALSE
i = 1
  Q[1] == j + r - i -> 2 + 2 - 1 = 3 TRUE (Q[1] is 3)
This makes sense (there is a Q diagonal to the proposed "?" spot in the image above.

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(596)
有趣的html代码源码:有趣的行为与 html段落标签(big funny paragraph)
上一篇
Pdfתhtml:HTML内联 PDF
下一篇

相关推荐

  • html hello world代码:Hello World

    Hello World代码如下:…

    2023-08-12 15:17:14
    0 50 68
  • html浏览器兼容代码:Hello World

    HTML浏览器兼容代码是指为了让不同的浏览器能够正常显示和支持网站内容,而编写的代码。具体来说,就是在编写 HTML 代码时,要遵循 W3C 标准,使用相应的代码规范,以确保网页在不同的浏览器中能够正常显示,从而达到浏览器兼容的目的。…

    2023-03-14 10:13:02
    0 85 96
  • css和html:Welcome to Our Website

    示例示例CSS(层叠样式表)是一种用于定义网页外观的样式表语言。它使用选择器来指定元素,并使用属性来指定元素的样式。HTML(超文本标记语言)是一种用于创建网页的标记语言。它使用标签来指定元素,并使用属性来指定元素的特性。…

    2023-06-14 05:37:19
    0 25 81
  • html嵌入js代码:My Title Hello World! document.write(

    示例示例HTML嵌入JS代码指的是将代码写在HTML文件中,以便在浏览器中运行。下面是一个示例:…

    2023-06-07 09:51:46
    0 99 69
  • html代码hr表示什么分割线

    示例示例HTML代码hr表示水平线,它可以用来将文档分割成不同的部分,以提高页面的可读性。下面是一个hr标签的示例代码:…

    2023-05-01 14:39:41
    0 17 79
  • android svg使用:Using SVG in Android for Beautiful and Scalable Gr

    Android SVG 使用是指在 Android 平台上使用 SVG(Scalable Vector Graphics)文件。SVG 是一种 XML 格式的图像文件,具有良好的可伸缩性,可以根据不同的分辨率自动适应。…

    2023-02-24 12:22:45
    0 83 95
  • html怎么做网页动态背景:Dynamic Background

    使用HTML和CSS来实现网页动态背景的方法如下:使用CSS3中的属性:…

    2023-08-13 12:04:44
    0 67 50
  • php格式化html:Hello World!

    PHP格式化HTML的主要目的是使HTML更易读,更容易维护和编辑。它可以帮助你更容易地找到HTML中的错误,并使代码更具可读性。…

    2023-04-16 06:41:22
    0 16 67

发表评论

登录 后才能评论

评论列表(71条)