hdu 1429 勝利大逃亡 續

2021-06-09 01:06:02 字數 954 閱讀 2025

廣搜+位運算:

在這裡我們建立乙個2進製鑰匙串,如果對應位有鑰匙則該位為1,反之為0,每當遇見鑰匙,我們就把這把這把鑰匙加到鑰匙串的對應位置,廣搜壓棧的時候需要判斷該位置是否為門的位置,並且檢查是否有相應的鑰匙,並且每個點對應乙個鑰匙串的狀態,建立三維陣列,前兩位表示儲存點的位置,後一位表示相應位置對應的鑰匙的狀態,進行一遍bfs即可。

#includeint m,n,t;

char map[21][21];

int dir_x[4]=;

int dir_y[4]=;

int find[21][21][1025];

int f[10000],a[10000],b[10000],bsu[10000];

int start_x,start_y,end_x,end_y;

int bfs(int x,int y)

else

j=f[front];

if('a'<=map[xx][yy]&&map[xx][yy]<='j')

else

k=1;

if(1<=xx&&xx<=m&&1<=yy&&yy<=n&&map[xx][yy]!='*'&&k==1)

if(find[xx][yy][1024]==0||(find[xx][yy][1024]==1&&find[xx][yy][j]==0))

}front++;

}return -1;

}

int main()

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

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

find[i][j][k]=0;

}getchar();

}printf("%d\n",bfs(start_x,start_y));

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