POJ 1324(A 狀態壓縮)

2021-06-25 08:50:53 字數 1377 閱讀 1470

真是好題啊,各種tle之後看了人家的解題報告才a的:

(1)一開始用deque儲存狀態資訊,用queue進行bfs,tle

(2)試圖用陣列儲存狀態資訊,自己寫佇列進行bfs,還是tle

(3)由於row和col都小於20,試圖用5*2個bit表示乙個位置,還是tle

終於看了discuss,找到了大牛的解題報告:原來要用相對位置儲存狀態啊,真是高貴的一逼啊,竟然12個bit就能儲存除了頭部意外的所有資訊了呢,參考了上述解題報告的思想,終於125ms a了(大牛的題解是32ms,在狀態處理上我的貌似慢些),總之第一道a*真是一把辛酸淚啊:

#include #include #include using namespace std;

const short dir[4][2] =,//up

,//down

,//left

//right

};inline short getdir(short r, short c, short nr, short nc)

int n, m, l, k;

char map[21][21];//map[r][c] = 1 means (r,c) is blocked else it's vacant

inline bool unreachable(int nr, int nc)

short dis[21][21]; //dis[r][c] record absolute bfs distance to (1,1) position

short head, tail, q[21*21*2];

const short mask = ;

struct snake

bool ispart(short nr, short nc)const

return false;

}} initial;

priority_queuepq;

short leaststep[21][21][1<<14];

bool input()

scanf("%d", &k);

memset(map, 0, sizeof(map));

for(int i = 0; i < k; ++i)

return true;

}void bfs()}}

}short astar()

leaststep[initial.r][initial.c][initial.body] = 0;

pq.push(initial);

snake now, nex;

while(!pq.empty())}}

return -1;

}int main()

}return 0;

}

POJ 1324 BFS 狀態壓縮 蛇走迷宮

參考 這個地方的狀態是怎麼表示的要學學。思路就是簡單的bfs,但是蛇的狀態不好表示,vis 21 21 1 14 中 前兩維表示蛇頭的位置,後一維中的二進位制中每兩位表示蛇身體相對於 前一節身體的方向,正好0,1,2,3四個數表示四個方向。這樣就可以把蛇的 狀態標識出來了。略挫,清楚思路就好。inc...

poj 1324 狀態廣搜

其實就是我們經常玩的貪吃蛇。不過現在我們優先蛇的頭的話,要用乙個巧妙的雜湊來把蛇的身體表達出來,那麼就可以用乙個4進製的數字來表示,蛇的身體長度最多不超過8,所以最多是2 7種狀態。1 include2 include3 include4 include5 include6 intconst n 8...

1185 POJ 狀態壓縮

這道題寫的我直 寫了6遍,不知道 錯了,然後按照題解,一點一點寫下來,跪哭了,太渣了 ps include include include include include include include include include include include define ll int64 ...