Parallel Knight's Tour算法

时间:2015-12-06 04:27:13

标签: c++ multithreading parallel-processing knights-tour

目前我有一个正在运行的骑士巡回算法。

我使用了以下组合:

  • 回溯
  • Warnsdorf的规则

该算法执行以下操作:

Checks to see if the board is solved (all squares visited) 
    If true: return true
else proceed:

Make a set of possible moves from current positions
Sort the set based on the number of moves available from those positions.

Go through the set. (Recursive call made here)
    If returned True:
       Set Solution board to appropriate number
       Return true
    else
      go back to last position
      return false.

没关系。这不是最好的解决方案。

我正在尝试使用并行化来提高速度,特别是使用C ++线程(#include<thread>)。

这个算法是什么?到目前为止,我尝试过的唯一方法有错误的共享问题,共享内存问题或根本没有运行。

1 个答案:

答案 0 :(得分:1)

当然这是针对C ++的,在调用#include<thread>标头之后,创建线程的一种简单方法是:

#include <iostream>
#include <thread>

void testThread()
{
    std::cout<<"Thread\n";
}

int main(int argc, char * argv[])
{
    std::testThread t(testThread);
    t.join();

    return 0;
}

std::testThread t(testThread);调用线程创建,而t.join();在完成后加入它们。但这都不使用锁。如果我是你,我会在网上查看相同的例子 - 有大量资源 - 显示如何在安全的庄园中实施锁。

需要注意的是,您必须确保代码的顺序版本实际上可以从并行运行中受益,因为创建线程可能会很昂贵。