複数の2つのブラシ* BFSを必要として下さいPOJ、問題が発生したことはありません

基本的な考え方:

それでもモデリングで立ち往生、個人的に私は、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を返します。
}

  

おすすめ

転載: www.cnblogs.com/songlinxuan/p/12444458.html