バックトラッキングアルゴリズムDay2--ノート

バックトラッキング

バックトラック(図小さなソースコードコロンビア)
ビット単位の圧縮空間を使用することができます。:バイトと短い型記憶列とスラッシュの状態を使用してNクイーン問題を解決する上で、私の以前のブログとして、Nクイーンバックトラックの3つのソリューション

ビットコンピューティングの知識:

数字の1の基本的なタイプ

一个字节等于8位  1byte = 8bit。

チャーは、16バイトの2を占めているので、文字のchar型を格納することができます。

整数:

byte:1个字节 8位

short :2个字节 16位

int :4个字节 32位

long:8个字节 64位

フロート:

float:4个字节 32 位

double :8个字节 64位

注:默认的是double类型,如3.14是double类型的,加后缀F(3.14F)则为float类型的。

char型:

char:2个字节。

ブールタイプ

boolean: (true or false)(并未指明是多少字节  1字节  1位 4字节)

メモリの最大値と最小値の範囲の2の基本的なタイプ。

  1. 短い(10 ^ 5)
    最小:Short.MIN_VALUE = -32768(15 -2電力)
    最大:Short.MAX_VALUE = 32767(15 -12番目)の

  2. INT(10 ^ 10)
    最小:はInteger.MIN_VALUE = -2147483648(-2 31番目の)
    最大:Integer.MAX_VALUEの=(31 -12パワー)2147483647

  3. 長い(10 ^ 19)
    最小:Long.MIN_VALUE = -9223372036854775808(63番目-2)
    最大:はLong.MAX_VALUE = 9223372036854775807(63 -12番目)の

  4. フロート(10 ^ 38)
    最小:Float.MIN_VALUEに=(2の-149パワー)1.4E-45
    マックス:(-12パワー128)Float.MAX_VALUE = 3.4028235E38

5.double(10 ^ 30)
最小:Double.MIN_VALUEに= 4.9E-324(-1074 2乗)
最大:Double.MAX_VALUE = 1.7976931348623157E30

ビットコンピューティング

ビットを知りたいは、1または0であり、ビットの数だけが、ビット0によって一つの他のビットである
ビットでAの数と位置だけ1ビットは他のビットのうちの1つであり、0〜または
位置に0であり、ビットはビット番号1によって0のみ他のビットである
1又は何今あるものにするために使用と踵
0または以前に今あるものとし、どの
ようなNクイーンズとして

for(int i=0;i<8;i++) {
			//row行的i列尝试放置皇后
			queens[row]=i;
			//判断该列 对角线是否为1 按位与1作与运算
			//如要知道第二列要没有放置皇后
			//cols:01100001
			//cv:&	00000100
		//cols&cv		 0
			int cv= 1<<i;
			if(( cols & cv )!=0 ) continue ;
			
			int lv=1<< (row-i+7);
			if((leftTop & lv)!=0 )continue ;
			
			int rv=1<< (row+i);
			if((rightTop & rv)!=0) continue;
			//将该列 对角线置为1
			//如将第二列置为皇后
			//cols:01100001
			//cv:	00000100
		//cols|cv		 1
			
			cols |=cv;
			leftTop |=lv;
			rightTop |=rv;
			place(row+1);
			//将该列 对角线重置为0		~表示取反
			//cols:01100101
			//cv:	00000100
			//~cv:	11111011
		//~cv&cols: 01100001	
			cols &= ~cv;
			leftTop &= ~lv;
			rightTop &= ~rv;
			
		}
リリース9件のオリジナルの記事 ウォンの賞賛0 ビュー155

おすすめ

転載: blog.csdn.net/weixin_44855907/article/details/104591316