題目大意:乙隻小狗被困在了一座迷宮中,迷宮有乙個起點和乙個終點,「x」代表牆,不能通行,「.」代表通路,迷宮終點的門只在特定時間開啟一瞬間,因此小狗必須在這個時刻到達終點才能逃生。給出迷宮的地圖和門開啟的時間k,要求計算小狗是否能逃生,若能輸出yes,不能輸出no。
解題思路:搜尋,dfs+剪枝。
ac**:
#include #include #include using namespace std;
char graph[10][10];
int sx,sy,dx,dy,n,m,k;
bool flag;
bool visit[10][10];
int turn[4][2] = ;
void dfs(int x,int y,int count)
if(count>=k)return ;
if(graph[x][y]!='x')
} }}
int main()
if(graph[i][j]=='d')
}} if(abs(sx-dx)+abs(sy-dy)>k||(sx+sy+dx+dy+k)%2==1)
{ cout<<"no"<
杭電ACM1010 深度優先搜尋 奇偶剪枝
乙個月之前,資料結構看完了深度和廣度搜尋,做這個搜尋題目的時候,總是超時,後來才知道可以進行剪枝可以判斷是否可以在t的時間內到達指定的地點。杭電1010這一題的題目大意是 一條狗進入乙個神奇的迷宮,一秒走乙個空白的地方,狗走過的地方會消失,也就是說狗不能往回走,門在t秒之後開啟,且開啟很短的時間,狗...
杭電OJ 1010, 從非遞迴的DFS 到 剪枝
今天敲了一波杭電的1010,面對迷宮一類的題目,我留在印象中的就是用棧來解決。後來查閱了一下網上的解決方法,發現用的是dfs 剪枝演算法,當然,就我的 而言,單單採用棧來敲,是不能ac的。從某種程度上來說,我的 就是採用棧和一定的資料結構實現了遞迴的dfs所具備的功能。廢話不多說,先上 每個位置的探...
hdu 1010 dfs,奇偶剪枝
背景 熟悉dfs,第一次遇見了剪枝,各種剪枝。奇偶剪枝 開始一直超時,用了奇偶剪枝之後瞬間優化到312ms。對於乙個沒有障礙的圖,起點 s 到終點 的理想最短路徑是 而如果中間有障 礙物的話,路徑是在理想最短路徑上加上乙個偶數 可以證明 這樣可以看來,任何路徑和理想最短路徑是同奇偶的。這樣就可以剪去...