hdu1429 勝利大逃亡 續

2021-05-24 06:21:33 字數 920 閱讀 4480

讓我初識位壓縮的一道bfs題,之前採用結構中增加char型別的key[26],然後採用陣列對映實現對鑰匙的儲存,交上去悲劇地mle了,然後在yhl大牛的部落格上發現了位壓縮這一好東東,現在和大家分享一下:用二進位制來表示手頭的鑰匙有哪些,100表示有第三把鑰匙,111表示有第

三、二、一把,搜尋下一點時,如果該點為鑰匙點,則可採用|運算來模擬拾取,顯然0001 | 1000 = 1001,同理,當為相應的門時採用&運算來模擬開啟,例如1101 & 0001 = 0001(即可以開啟'a'門),附ac**如下:

# include

# include

using namespace std;

struct node

;int n, m, t;

int go[4][2] = , , , };

int map[25][25];

int visited[25][25][1025];

int sx, sy, ex, ey;

int check(int x, int y)

int check1;

void bfs()

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

}else

if (map[next.x][next.y] >= 'a' && map[next.x][next.y] <= 'z')       

}else if (!visited[next.x][next.y][next.nkey])                      }}

}}int main()

if (map[i][j] == '^')  }}

check1 = -1;

bfs();

printf("%d/n", check1);

}return 0;   

}

HDU1429 勝利大逃亡 續

學習位壓縮很好的一道題,因為只有10把鑰匙,那麼可以把10鑰匙壓縮二進位制,比如1000就表示身上只要第4把鑰匙的狀態,110表示帶有第2把和第3把鑰匙,那麼要判斷當前的鑰匙串有沒有能開啟當前門鑰匙,那麼就只要乙個 運算就可以,因為11101110 00100000 00100000 這樣就說明那一...

hdu 1429 勝利大逃亡 續

code include include using namespace std struct px struct px start char map 25 25 int mark 25 25 1025 dir 4 2 三維表,走過的路徑對應表的狀態 int wys 10 int n,m,t boo...

hdu 1429勝利大逃亡 續

題目 一開始想了好幾種方法。最後實驗都錯了。要麼是就是演算法思想錯誤。然後以為可以這樣。果斷。記憶體超出。下面是錯誤 include include includeusing namespace std define n 21 int n,m,t char map n n bool visited ...