POJ 1753 BFS 狀態壓縮

2021-07-07 06:48:28 字數 859 閱讀 7559

非常普通的一道bfs題,做的時候貪快,沒想好就寫了。。。唉。。

對於給的一盤棋,最多只有 2^16 種翻法,並且翻的先後順序不影響結果,所以只需要bfs列舉一下就好了

對於每出現過的一種狀態,用狀態壓縮的數值標記一下,不用再進入佇列(否則會超時或者死迴圈啦)

暴力 模擬一下 ,每次檢查是否 全黑65535  或者全白 0  就可以了

#include #include #include #include #include #include #includeusing namespace std;

int min(int a,int b)

return ret;

}bool vis[1<<16+5];

node flap(node tt,int xx,int yy)

tt.x=xx;

tt.y=yy;

return tt;

}int main()

getchar();

} int minstep=2147483647;

while(!qq.empty()) qq.pop();

qq.push(st);

while(!qq.empty())

for (i=1;i<=4;i++)

vis[res]=true;

ret.step=tt.step+1;

qq.push(ret);}}

}if (minstep==2147483647)

printf("impossible\n");

else

printf("%d\n",minstep);

return 0;

}

POJ1753 狀態壓縮( BFS) 棋盤問題

棋盤問題,改變乙個子的顏色,這個子以及這個子周圍的四個位置 左右上下 的子分別變色,求最少的改變次數。此類題大部分應該可以用狀態壓縮 暴力搜尋解決。純粹找規律不太合理。1 第一種方法,狀態壓縮後bfs暴力搜尋。因為棋盤很小,只有16個格仔,列舉所有的狀態共有2 16 65536種。所以有可以用int...

狀態壓縮BFS

魔板,狀態壓縮bfs include include include include include include using namespace std unordered mapint dist 記錄變換到當前狀態所需要的步驟數 unordered mapchar string pre s 記...

poj 1753 位壓縮 搜尋

題意 有乙個4 4的方格,每個方格中放一粒棋子,這個棋子一面是白色,一面是黑色。遊戲規則為每次任選16顆中的一顆,把選中的這顆以及它四周的棋子一併反過來,當所有的棋子都是同乙個顏色朝上時,遊戲就完成了。現在給定乙個初始狀態,要求輸出能夠完成遊戲所需翻轉的最小次數,如果初始狀態已經達到要求輸出0。如果...