參考
這個地方的狀態是怎麼表示的要學學。。
//思路就是簡單的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 記...