真是好題啊,各種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 ...