思路:因為存在門和鑰匙,所以乙個點可能被多次訪問,解決方法是在vis陣列中儲存當前持有的鑰匙的狀態,對於乙個相同的點,一種持有鑰匙的狀態只能訪問一次,很容易理解在沒有更多鑰匙的情況下,多次訪問這個點得到的結果不會更優(因為只有10把鑰匙,**中用二進位制儲存,但用bool陣列儲存也是完全可以的。另外用不用優先佇列對於這題的影響不大)
#include #include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
typedef unsigned int ui;
#define mp(a,b) make_pair(a,b)
#define mem(a,b) memset(a,b,sizeof(a))
#define debug(a) printf("debug: %d\n",a)
const int mod = 1000000007;
const int maxn =22;
const int inf = 0x3f3f3f3f;
int n,m,t;
int sx,sy,ex,ey;
char mp[maxn][maxn];
bool vis[maxn][maxn][4];
int dir[4][2]=,,,};
struct node
node(int x,int y,int v,int k)
bool operator<(const node& rhs) const
};int bfs()
else if (c>='a' && c<='j')
cout<
BFS HDU1253勝利大逃亡
problem description ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會.魔王住在乙個城堡裡,城堡是乙個a b c的立方體,可以被表示成a個b c的矩陣,剛開始ignatius被關在 0,0,0 的位置,離開城堡的門在 a 1,b 1,c 1 的位...
1429 勝利大逃亡( 續 ) hdu
ignatius再次被魔王抓走了 搞不懂他咋這麼討魔王喜歡 這次魔王汲取了上次的教訓,把ignatius關在乙個n m的地牢裡,並在地牢的某些地方安裝了帶鎖的門,鑰匙藏在地牢另外的某些地方。剛開始ignatius被關在 sx,sy 的位置,離開地牢的門在 ex,ey 的位置。ignatius每分鐘只...
HDU1429 勝利大逃亡 續
學習位壓縮很好的一道題,因為只有10把鑰匙,那麼可以把10鑰匙壓縮二進位制,比如1000就表示身上只要第4把鑰匙的狀態,110表示帶有第2把和第3把鑰匙,那麼要判斷當前的鑰匙串有沒有能開啟當前門鑰匙,那麼就只要乙個 運算就可以,因為11101110 00100000 00100000 這樣就說明那一...