題目大意:給定乙個棋盤,要求從(1,1)走到(n,m),相鄰格仔之前可能是牆,門或者什麼都沒有,牆的話就無法通過, 門的話就必須有對應的鑰匙才能通過,要求求出最少的步數,若無法到達就輸出1。
除錯了近兩個小時,一直找不到錯在哪,後來看了別人的程式,發現忘記考慮1*1的棋盤了。真是嗶了狗了。
題很簡單,就是對狀態壓縮的入門,然後複習一下棋盤的最短路的**,自己還是太菜了,最短路的**打了那麼多次,還是很慢,而且除錯的時候又出現很多錯。
別的不說上**
#include#include#include#include#include#include#include#include #include using namespace std;
#define all(x) (x.begin(),x.end());
#define pi acos(-1,0);
typedef long long ll;
const int maxn = 100000;
int n,m,p;
int wall[51][51][51][51];
bool vis[51][51][1<<10];
int key[51][51];
int dx[4]=;
int dy[4]=;
int ans;
struct node
}; bool check(int x,int y)
void init()
if(vis[ux][uy][ukey]) continue;
vis[ux][uy][ukey]=1;
for(int i=0;i<4;i++)
} return -1;
}int main()
printf("%d\n",bfs());
} return 0;
}
hdu5094Maze bfs 狀態壓縮
開乙個四維陣列記錄牆和門的情況 開乙個三維陣列標記在該位置時有哪些鑰匙 鑰匙的記錄用狀態壓縮 注意在同乙個位置可以有多把鑰匙,在這卡了乙個晚上。include include include include using namespace std const int maxn 60 int vis ...
HDU 5094 題解(狀壓BFS)
maze 題目中文大意 這個故事發生在 星際迷航 的背景下。星際爭霸 的副隊長史波克落入克林貢的詭計中,被關押在他們的母親星球qo nos上。企業的上尉詹姆斯 t 柯克 james t.kirk 不得不乘宇宙飛船去救他的副手。幸運的是,他偷走了史波克所在的迷宮地圖。迷宮是乙個矩形,它有n行垂直和m列...
hdu 5094 Maze 狀態壓縮dp 廣搜
使用廣度優先搜尋,dp key x y 表示在擁有鑰匙key並在座標 x,y 時需要的最少的步數,key的二進位制的第i位等於1則代表擁有第i把鑰匙。需要注意以下幾點 1.可能存在同一座標有多把鑰匙。2.牆和門是在兩個座標間進行移動時的障礙,並不在座標點上,因此兩個方向的移動都要加入wall陣列。2...