POJ 1324 BFS 狀態壓縮 蛇走迷宮

2021-08-09 17:23:53 字數 909 閱讀 2373

參考

這個地方的狀態是怎麼表示的要學學。。

//思路就是簡單的bfs,但是蛇的狀態不好表示,vis[21][21][1<<14]中

//前兩維表示蛇頭的位置,後一維中的二進位制中每兩位表示蛇身體相對於

//前一節身體的方向,正好0,1,2,3四個數表示四個方向。這樣就可以把蛇的

//狀態標識出來了。

//**略挫,清楚思路就好。

#include

#include

#include

#include

using

namespace

std;

int n,m,l,k,mp[25][25];

int dir[3][3]=;

int d[4][2]=;

bool vis[21][21][1

<<14];

struct bodybody,bb;

bool chak(int a,int b,body c)

return

false;

}int bfs()

}if(vis[x][y][sta]) continue;

vis[x][y][sta]=1;

bb.cnt=body.cnt+1;

q.push(bb);}}

return -1;

}int main()

vis[body.x[1]][body.y[1]][sta]=1;

scanf("%d",&k);

for(int i=0;iscanf("%d%d",&x,&y);

mp[x][y]=1;

}printf("case %d: %d\n",++cas,bfs());

}return

0;}

POJ 1324(A 狀態壓縮)

真是好題啊,各種tle之後看了人家的解題報告才a的 1 一開始用deque儲存狀態資訊,用queue進行bfs,tle 2 試圖用陣列儲存狀態資訊,自己寫佇列進行bfs,還是tle 3 由於row和col都小於20,試圖用5 2個bit表示乙個位置,還是tle 終於看了discuss,找到了大牛的解...

POJ 1753 BFS 狀態壓縮

非常普通的一道bfs題,做的時候貪快,沒想好就寫了。唉。對於給的一盤棋,最多只有 2 16 種翻法,並且翻的先後順序不影響結果,所以只需要bfs列舉一下就好了 對於每出現過的一種狀態,用狀態壓縮的數值標記一下,不用再進入佇列 否則會超時或者死迴圈啦 暴力 模擬一下 每次檢查是否 全黑65535 或者...

狀態壓縮BFS

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