hdu 1429 勝利大逃亡 續

2022-05-13 08:20:14 字數 1164 閱讀 4691

二進位制狀態壓縮+bfs。對於每乙個點記錄所有鑰匙狀態下最少的時間。如果這個點這個鑰匙狀態沒有走過或者走過了但是時間花的少了,那麼就走過去。

#include#include

#include

#include

using

namespace

std;

const

int maxn = 22

;int

sx, sy, ex, ey;

char

int tz[maxn][maxn][1

<< 10];//

記錄該狀態下最少的時間

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

struct

abcdt[

500001

];int

main()

getchar();

}dt[

0].x = sx; dt[0].y = sy; dt[0].t = 0, dt[0].zt = 0

;

for (i = '

a'; i <= '

j'; i++) dt[0].key[i - '

a'] = 0

;

int b = 0, k, flag = 0

;

for (i = 0; i <= b; i++)

if (dt[i].x == ex&&dt[i].y ==ey)

for (k = 0; k < 4; k++)}}

//如果是鑰匙

elseaj

')if (tz[xx][yy][sumzt] == 999999999 || dt[i].t + 1

dt[b].zt =sumzt;

dt[b].t = dt[i].t + 1

; dt[b].x = xx; dt[b].y =yy;}}

//如果是終點或者路

else^.

@') }}

}}

}if (!flag) printf("

-1\n");

}return0;

}

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 ...