hdu 2209 BFS 狀態壓縮

2021-06-17 00:57:28 字數 938 閱讀 5651

這題bfs是比較簡單,但是就是在狀態壓縮和那個翻牌的操作就蛋疼了。。。。開始的時候暴力。。。華麗麗的超時了。。。。最後看了別人的思路,才恍然大悟。。。。

這題:因為翻牌是0變1,1變0,所以可以通過異或來實現,而每一位的翻牌操作,只需要事前把用來異或的數算出來儲存就行,如下:

handle[1] = 3;

handle[length] = 3 << ( length - 2 );

for( int i = 2; i < length; i++ )

然後其他的就沒什麼了。。。。。。。

ac**如下:

#include #include #include #include #include using namespace std;

typedef structnode;

int mark[1<<20];

node start;

int handle[21];

int bfs( int length )

for( int i = 1; i <= length; i++ )

mark[temp.now] = 1;

q.push( temp );

} }return -1;

}int main()

handle[1] = 3;

handle[length] = 3 << ( length - 2 );

for( int i = 2; i < length; i++ )

memset( mark, 0, sizeof( mark ) );

int ans;

if( length == 1 )else

}else

if( ans == -1 )else

} return 0;

}

hdu 2209 狀態壓縮廣搜

思路 20張牌 有1 20中情況 用二進位制標記,這道題的關鍵地方就是怎樣無翻牌 這裡用到位運算 1 x 若x為0 則為1 否則為0 這裡正好用到翻牌 對前兩張和後兩張 都可以和3 11 進行異或運算 對中間的和7 111 進行異或運算 include include include include...

hdu4845 狀態壓縮BFS

題意 給乙個n m的矩陣,從11,走到nm,格仔和格仔之間可能有牆,也可能有門,有的格仔上面有鑰匙,相應的鑰匙開相應的們,撿鑰匙和開門都不需要時間,問你最少多少部能走到nm.思路 哎!一眼就看出來了是個狀態壓縮搜尋的水題,結果wa了將近兩個小時,就是因為忽略了乙個點可能有多把鑰匙,回來說下這個題,我...

hdu 5025 bfs 狀態壓縮

首先因為鑰匙是順序拿取的,所以記錄當前取到第幾把就可以 因為殺蛇是無序的,所以要用0 1二進位制數表示 然後寬搜就好了 wrong了一天就是讀入問題,默默反省 include include include include include include define max 107 using n...