基本的な考え方:
それでもモデリングで立ち往生、個人的に私は、BFSは、どのような点に注意を払う必要があることを感じます。
1.状態が状態の可能な拡張を見つける必要があり、それは反復することができます。
2.境界、例えばこの問題、オーバーフローが存在しないこと、深い検索を使用する場合、0モジュロある幅広い検索、もし、19までlonglongs。
しかし、このテーマの疑いがあると、メモリゲージの問題があります。
私は最高の63メガバイトのモニタリングによると、200自身の思考タルソ分割問題の種類が、爆発のメモリを参照するか、何が起こっているかを把握することはできません。
キーポイント:
ノー;
問題のコードを接続します。
書式#include <iostreamの> の#include <文字列> の#include <ベクトル> の#include <キュー> std名前空間を使用しました。 const int型MAXN = 101; ブールdevide(文字列s、INT NUM){ //检验是否能被整除 INT R = 0。 以下のために(; I <s.size(); INT iが0 = I ++){ //对于大数大头在前面、 INT TEMP =(S [I] - '0')+ R * 10。 R =一時%のNUM。 } (R == 0)の場合に trueを返します。 それ以外の リターンはfalse; } 文字列BFS(int型N){ 文字列s = "1"。 キュー<文字列> Q; (S)q.push。 (!q.empty()){ながら 列STR = q.front()。 q.pop(); 以下のために(INT iは= 0; I <2; I ++){ (I == 0){もし STR + = "0"。 } 他{ STR + = "1"。 } IF(devide(STR、n))を リターンSTR。 q.push(STR)。 } } } int型のmain(){ int型のn; 一方、(CIN >> N){ IF(N == 0) 戻り0; COUT << BFS(N)<< ENDL。 } 0を返します。 }