【发布时间】:2012-11-04 10:59:18
【问题描述】:
我知道解决迷宫是 Stack Overflow 上经常讨论的话题。这是一个大家可能感兴趣的问题。
将给出一个 n*n 矩阵形式的迷宫作为输入。每个元素将位于 0-9 之间。还会给出一系列数字,每个数字都在 0-9 之间。矩阵和序列数组的维数也是已知的。问题是在矩阵中找到满足给定序列的从 (0,0) 到 (n-1,n-1) 的所有可能路径。路径只能向下、向右或向下+向右移动。必须使用线程来完成。
输入和输出格式在下面给出的示例中说明-
示例: Example1 http://gowthams.in/etc/1.PNG Example2 http://gowthams.in/etc/2.PNG Example3 http://gowthams.in/etc/3.PNG
每个线程可以打印其位置 (i,j) 或更新某种数据结构以供稍后处理。
解决这个问题的最佳方法是什么?
这是一个家庭作业问题,我可以寻求帮助。我不是在寻找任何类型的代码。我只是想要一些正确的方向。
谢谢!
【问题讨论】:
-
@MitchWheat 我对等待线程返回的处理感到震惊。我对进程做了类似的问题,我只是使用 wait(NULL) 来确保在程序继续之前所有进程都返回。线程本质上是并行处理,所以我不知道该怎么做。我确信一旦清楚地了解如何执行此代码,我就可以自己实现代码。
-
那么这是算法问题还是线程问题?如果是后者,发布您将在单个线程中使用的算法可能会有所帮助。此外,您的所有 3 个示例看起来都一样。
-
您的基本算法看起来不错,但它会在大型问题实例上创建大量线程。将子问题添加到队列(使用适当的锁定)并使用固定数量的线程而不是每次都启动一个新线程可能会更好。路径是否允许向上或向左?如果是这样,您需要 (a) 为每个子问题创建 8 个子问题而不是 3 个,并且 (b) 跟踪当前子问题已经访问过哪些单元格,以避免无限循环。
-
@Gowtham 给出你的确切赋值语句。我认为您误解它的可能性很小。
-
@Gowtham:但它可以从底部的
2移动到第二个4,从第二个4移动到6。或者可能意图是您只能向右、向下或向下+向右移动?因为问题陈述没有说这样的话。
标签: c multithreading algorithm maze