一般来说,我们都听说过编程语言中的函数或过程.但是,我发现我几乎可以互换地使用这些术语(这可能是非常错误的).
所以,我的问题是:
它们的功能,用途和用途有何不同?
一个例子将不胜感激.
最近几天,我已经从主人的研究中勉强自己,并一直专注于这个(看似简单的)难题:
这个10*10网格构成了100个可用场所的正方形.目标是从一个角落开始并遍历所有地方,相对于一些简单的"遍历规则"并达到数字100(如果你是一个程序员,则从99开始,而不是从0开始:)
遍历的规则是:
1.沿着垂直和水平轴跳两个空格
2.沿对角线一个空格跳
3.您只能访问每个方块一次
为了更好地可视化,这是一个有效的示例遍历(直到第8步):
示例Traverse http://img525.imageshack.us/img525/280/squarepuzzle.png
从手动的角度来说,我一直在努力解决这个难题.多年来,我一直试图手工解决它,但我从来没有超过96.听起来容易吗?试试自己,亲眼看看:)
因此,为了解决这个问题,我在Python中开发了一个简短的(大约100行代码)程序.我是这种语言的初学者,我想看看我能做些什么.
该程序只是应用详尽的尝试和错误解决技术.换句话说:蛮力深度首先搜索.
我的问题来自于此:遗憾的是,该程序无法解决问题,因为状态空间太大,以至于搜索永远不会找到解决方案.它可以毫不费力地达到98号(并打印出来),但仍然不是一个完整的解决方案.
该程序还打印出它到目前为止所涵盖的搜索树的长度.在几分钟内,例如,第65个元素的遍历列表将被覆盖到最后,只有一条路径.该数字以指数增加的时间段减少.我已经运行了很长一段时间的代码,并且无法超越50个障碍,现在我确信.
似乎这种简单的方法是不够的,除非我永远运行它.那么,如何才能更快,更高效地改进代码,以便提供解决方案呢?
基本上,我期待看到有关如何:
应用编程技巧/技巧来克服疲惫
..最终实现了一个实质性的解决方案.
提前致谢.
修订
感谢Dave Webb将问题与域名相关联:
这非常类似于Knight's Tour问题,该问题涉及将骑士绕棋盘移动而不重新访问同一个方块.基本上它是相同的问题,但具有不同的"导线规则".