- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我的代码:
maxX=8; maxY=8;
maxSteps=60 -- If I change maxSteps=55 I get an answer
move :: [(Int, Int)] -> [( Int, Int)]
move list
| lastX>maxX || lastY>maxY || lastX<=0 || lastY<=0 = []
| lastMove `elem` (init list) = []
| length list == maxSteps = list
| length m1 == maxSteps = m1
| length m2 == maxSteps = m2
| length m3 == maxSteps = m3
| length m4 == maxSteps = m4
| length m5 == maxSteps = m5
| length m6 == maxSteps = m6
| length m7 == maxSteps = m7
| length m8 == maxSteps = m8
| otherwise = []
where lastMove = last list
lastX = fst lastMove
lastY = snd lastMove
m1 = move (list ++ [(lastX+1,lastY+2)])
m2 = move (list ++ [(lastX+2,lastY+1)])
m3 = move (list ++ [(lastX-1,lastY+2)])
m4 = move (list ++ [(lastX-2,lastY+1)])
m5 = move (list ++ [(lastX+1,lastY-2)])
m6 = move (list ++ [(lastX+2,lastY-1)])
m7 = move (list ++ [(lastX-1,lastY+2)])
m8 = move (list ++ [(lastX-2,lastY-1)])
y = move [(1,1)]
main = print $ y
你知道为什么它永远不会完成吗(也许我可以再等等......)?您是否有其他解决方案来实现相同的强力算法但工作速度更快?
最佳答案
它会终止(在我的电脑上运行大约 1 分钟)并产生正确答案。
一个简单的加快速度的方法是在列表的前面添加一个新的移动(并在打印之前反转结果)。添加第一个元素需要常数时间,而将元素追加到列表的后面在其大小上是线性的。
您的代码中还有一个错误:m3
和m7
是一样的。修复这个错误并将新的移动添加到列表的前面后,代码运行不到一秒:
maxX = 8
maxY = 8
maxSteps = 60
move :: [(Int, Int)] -> [( Int, Int)]
move list
| lastX > maxX || lastY > maxY || lastX <= 0 || lastY <= 0 = []
| lastMove `elem` (tail list) = []
| length list == maxSteps = list
| length m1 == maxSteps = m1
| length m2 == maxSteps = m2
| length m3 == maxSteps = m3
| length m4 == maxSteps = m4
| length m5 == maxSteps = m5
| length m6 == maxSteps = m6
| length m7 == maxSteps = m7
| length m8 == maxSteps = m8
| otherwise = []
where lastMove = head list
lastX = fst lastMove
lastY = snd lastMove
m1 = move ((lastX + 1, lastY + 2) : list)
m2 = move ((lastX + 2, lastY + 1) : list)
m3 = move ((lastX - 1, lastY + 2) : list)
m4 = move ((lastX - 2, lastY + 1) : list)
m5 = move ((lastX + 1, lastY - 2) : list)
m6 = move ((lastX + 2, lastY - 1) : list)
m7 = move ((lastX - 1, lastY - 2) : list)
m8 = move ((lastX - 2, lastY - 1) : list)
y = move [(1, 1)]
main = print $ reverse y
我又做了一些改变。首先,我摆脱了“手动”在每一步添加 8 个可能的 Action 。我们可以使用列表来做到这一点。这种方法有助于避免此类错误。结果还表明,执行时间取决于检查新移动的顺序。这个版本在大约一分钟内找到一个 open tour(并且,在我看来,它比原始代码更具可读性):
maxX = 8
maxY = 8
maxSteps = 64
shifts = [-1, 1, -2, 2]
move :: [(Int, Int)] -> [(Int, Int)]
move path
| lastX > maxX || lastY > maxY || lastX <= 0 || lastY <= 0 = []
| lastMove `elem` tail path = []
| length path == maxSteps = path
| not (null validNewPaths) = head validNewPaths
| otherwise = []
where lastMove@(lastX, lastY) = head path
newPaths = [(lastX + x, lastY + y) : path | x <- shifts, y <- shifts, abs x /= abs y]
validNewPaths = filter (\xs -> length xs == maxSteps) (map move newPaths)
main = print $ reverse (move [(1, 1)])
关于algorithm - Haskell:如果我尝试超过 55 步,Knight tour 永远不会结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449556/
go版本go1.12.9 darwin/amd64 安装 golang.org/x/tour 软件包后,我运行命令 tour 并收到错误: Couldn't find tour files: coul
使用 bootstrap-tour 插件 ( http://bootstraptour.com/ ),我想在除最后一步之外的每个步骤上禁用或隐藏默认的“End Tour”按钮。 我尝试修改步骤模板以完
我正在尝试使用 Bootstrap 主题在 Wordpress 网站上实现 Bootstrap Tour,但到目前为止,每次我尝试链接样式表 (CSS) 和 JavaScrit 时,它都不起作用。该页
正如“A Tour of Go”的 Crawl 示例中提到的命中,我修改了 Crawl 函数,只是想知道为什么“go Crawl”无法生成另一个线程,因为只找到一个 url 被打印出来。 我的修改有问
HTML: button JS: var tour = new Tour({ steps: [{ element: "#enrol-btn1", title: "Exam Enrolm
我正在尝试使用 vue-tour,按照指南中的确切步骤我收到了这个错误 https://github.com/pulsardev/vue-tour 步骤 在 main.js 上添加 vue-tour
我正在尝试使用DFS制作程序骑士之旅,但我无法解决这个程序..因为我总是有这样的消息错误 线程“AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBounds
我真的可以使用帮助来关闭我正在构建的网页的 Bootstrap Tour 插件的“自动启动”功能。这次旅行本身效果很好。它按照预期从一步跳到另一步。但是,当用户第一次查看页面时,导览会自行开始。用户可
我正在使用 Bootstrap 游览,但问题是我只需要游览/突出显示不正确的字段。 Bootstrap 游览的问题在于硬编码所有元素 id 或类名。我遇到的表单错误是基于不正确的字段。因此,我无法对字
我们可以通过获取当前步骤元素 var step = tour._options.steps[tour.getCurrentStep()]; var element=$(step.element); 与
我一直在尝试使用“Bootstrap Tour”在我的网站上安装一个导览,我对 Javascript 和一般编码还很陌生,而且我已经做了一整天。我想我会来这里问更有经验的人。 hi1 有时会起作用,但
我对 Bootstrap tour 有疑问. 我的问题 当我从一个页面重定向到另一个页面时,init 函数将被调用,但不会自动继续浏览。所以 Bootstrap 之旅不会显示。该页面还包含一个 AJA
我在这里发帖是因为我无法在 Boostrap Tour 的官方文档或此处的任何其他主题中找到解决我的问题的方法。 这是我的问题:我有一个页面,我想在其中初始化两个游览,以便让我的用户选择从哪一个开始。
我通过我的网站进行了游览。我希望用户在结束游览后可以通过单击按钮手动开始游览。 按钮: Start Tour Bootstrap 游览脚本。 var tour = new Tour(); tour
我正在尝试突出显示表格行。即使有了针对 z-indexes 等的 Bootstrap 修复 github issue link 看看这个 fiddle :jsFiddle JavaScript $("
我在我的网站“Drupal 8”上安装了下一个模块“D8:Bootstrap Tour”,它使用主题“Bootstrap 3”。 https://www.drupal.org/project/bs_t
以下是我的引用代码: 我正在为我的应用程序使用 Bootstrap 游览。 要求: 当我点击“下一步”时,我处于第一步,然后它正在检查“#id2”的值。如果 id2 值不为空,则应跳过该步骤并直接进入
我已经在我的项目中实现了 Bootstrap 之旅。我尝试将其加载到模态窗口上,但没有显示任何内容。下面是我的代码: $(document).ready(function (
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
我正在玩 Bootstrap Tour,我发现自己卡在了导航页面上。 在我的导览中,第四步将用户从 index.cshtml 带到 page.cshtml,这工作正常,但是导览框不会在 page.cs
我是一名优秀的程序员,十分优秀!