第V章アルゴリズムの仕事 - バックトラック

まず、バックトラックの理解

  バックトラックは、最適なソリューションの完全なアレイの等価から発見され、それだけではない、完全な配列トラバーサルソリューションスペースツリーの問題、深さ優先探索トラバーサルは、制約関数の中央から下のルートから始まります剪定やバウンディング機能を、横断の数を減らし、条件が満たされない場合、それは木の上の解空間の背中を横断する、または最適なソリューションの深さ優先探索をダウン継続するダウントラバース。

第二に、サブセット和問題

  

 

   解空間は、ベクトルで表現される(1、1、1、0、0)であり、この数は、選択され、0が選択されていない表します。

  制約関数:和+ S [T] <= C。tは、横断電流サブセットを合計する現在のノードであり、S [t]は、現在のノードの値です。

  コードは以下の通りであります:

1つの#include <iostreamの>
 2  使用して 名前空間STD;
 3  の#define MAX 1000年
 4。 
5。 INT N-;                    // セットサイズ
6  のint C;                    // ターゲット
7  INTの S [MAX];               // セット
。8  int型 SUM = 0 ;              / / 電流および
9。 int型 X [MAX] = { 0 };       // レコードのサブセット
10  INTフラグ=で0 ;             //レコードかどうかを実行可能な解決策を見つけるために
11。 
12が ボイド(バックトラックINT T){
 13は     IF(==内のフラグ1。 リターン ;   // 検索溶液リターン
14      IF(T> N-){
 15          // 記録又は出力可能溶液
16          IF( !&& C == SUM 内のフラグ){
 17              、フラグ= 1 ;
 18である             ためINT I = 1 I <= N; I ++ 19                  IF(X [I] == 1 20は                      COUT << S [I] << " " ;
 21は              COUT << ' \ N- ' ;
 22が             戻り23である         }
 24      }
 25      {
 26は         IF(SUM + S [T] <= C){
 27              X [T] = 1 ;
 28              SUM = + S [T ];
 29              バックトラック(T + 1);   // 左サブツリートラバース
30              SUMを- = S [T];
 31である              X [T] = 0 ;
 32          }
 33のIS         バックトラック(T + 1);    // トラバース右サブツリー
34である     }
 35  }
 36  
37 [  INT メイン(){
 38である      CIN >> N- C;
 39      int型 A = 0 ;
 40      INT I = 1 ; I <= N-; I ++ ){
 41は、          CIN >> S [I]、
 42は          A + = S [I]は、
 43である     }
 44がなく     IF(A <C)    // すべての要素の集合とが目標値よりも小さい場合、確かに溶液
45          COUT << " ノーソリューション!\ N-" ;
 46は、     他の{
 47          バックトラック(1 ;)
 48          IF(=内のフラグ!1。 // ソリューションをバックトラックした後、まだ発見されない
49              COUT << " !ノーソリューション" << ' \ N- ' ;
 50      }
 51は、      システム(" PAUSE " );
 52である     リターン 0 ;
 53です }

プログラミングの問題では第三に、学習問題と力

  私が最も珍しいが、選択機能と機能をバウンディング制約が、これらの二つは本当に少し困難な場合、これら2つの関数は、一度良い仕事をしませんでしたバックトラック学び、それが最終的な結果がエラーにつながる、アルゴリズムタイムアウトにつながると感じています。

  私たちは、困難な問題が発生していなかったチームをプログラミング結び目、チームメイトの制約は常に非常に良い、プログラミングで私を助けて、この一方の機能が優れている理解します。

おすすめ

転載: www.cnblogs.com/jewfer-03-08/p/12060830.html