杭電ACM1010 深度優先搜尋 奇偶剪枝

2021-06-29 03:28:06 字數 1103 閱讀 6554

乙個月之前,資料結構看完了深度和廣度搜尋,做這個搜尋題目的時候,總是超時,後來才知道可以進行剪枝可以判斷是否可以在t的時間內到達指定的地點。

杭電1010這一題的題目大意是:一條狗進入乙個神奇的迷宮,一秒走乙個空白的地方,狗走過的地方會消失,也就是說狗不能往回走,門在t秒之後開啟,且開啟很短的時間,狗只有在t秒的時候到達才能離開。

下面是ac的**:

# include # include using namespace std;

char str[10][10];

int m, n, t;

int ex, ey;

int dx[4] = ;

int dy[4] = ;

bool if_yes; //布林變數,來判斷是否可以到達

int main()

else if(str[i][j] == 'd' || str[i][j] == 'd') //找到終點

else if(str[i][j] == 'x' || str[i][j] == 'x') //數牆有多少

wall_count++;

}getchar();

} if(n * m - wall_count >= t) //空白的地方必須大於等於時間,這個很明確的,不然到不了,進行剪枝

if(if_yes)

cout << "yes" << endl;

else

cout << "no" << endl;

} return 0;

}void dfs(int x, int y, int count)

int a = (t - count) - (abs(x - ex) + abs(y - ey)); //算出偏移路徑

if(a % 2 == 1 || a < 0) //如果是奇數或者小於0, 進行剪枝

for(int i = 0; i < 4; i++) //四個方向進行搜尋

if(if_yes)

break;

}}

杭電ACM1010(dfs 剪枝)

題目大意 乙隻小狗被困在了一座迷宮中,迷宮有乙個起點和乙個終點,x 代表牆,不能通行,代表通路,迷宮終點的門只在特定時間開啟一瞬間,因此小狗必須在這個時刻到達終點才能逃生。給出迷宮的地圖和門開啟的時間k,要求計算小狗是否能逃生,若能輸出yes,不能輸出no。解題思路 搜尋,dfs 剪枝。ac inc...

杭電ACM題目分類

基礎題 1000 1001 1004 1005 1008 1012 1013 1014 1017 1019 1021 1028 1029 1032 1037 1040 1048 1056 1058 1061 1070 1076 1089 1090 1091 1092 1093 1094 1095 1...

杭電acm 排列2

這題的核心演算法就是排列問題 就目前常用的排列演算法有兩種 一種是按字典列出排序,c stl所使用的方法,能夠支援重複元素的全排列。另外一種是使用遞迴生成排序。先說容易理解的一種方法,使用遞迴生成排序 例如1,2,3,4,這個序列。最開始,也就是遞迴最外層我們可以將其分成 1 2,3,4,2 1,3...