0

現在、機能している騎士のツアーアルゴリズムがあります。

私は次の組み合わせを使用します:

  • バックトラッキング
  • ワーンスドルフの法則

このアルゴリズムは次のことを行います。

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>ます。

これのアルゴリズムは何ですか?これまでのところ、私が試した唯一の方法は、誤った共有の問題、共有メモリの問題があるか、まったく実行されません。

4

1 に答える 1

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();します。しかし、これはすべてロックを使用しない場合です。私があなただったら、同じ例をオンラインで調べます-安全なマナーでロックを実装する方法を示すリソースがたくさんあります.

注意すべきことは、スレッドの作成にはコストがかかる可能性があるため、コードの順次バージョンが実際に並行して実行されることでメリットが得られることを確認する必要があるということです。

于 2015-12-06T04:35:45.660 に答える