題目描述
題解 基本演算法思路就是深搜,不過會超時,因此得奇數偶數剪枝,就可以ac了。
/**
* > file name: dogmaze.cpp 深度優先搜尋加回朔加奇數偶數剪枝
* > author: yyhaker
* > created time: 2017/6/1
*/#include
#include
#include
#include
using
namespace
std;
int n,m,t;
char ch[10];
int maze[10][10];
int sx=0,sy=0,ex=0,ey=0; //起點和終點
int ok=false;
int da[4]=;
int db[4]=;
bool visit[10][10];
int count_=0;
void dfs(int a,int b)
if(count_>t||ok) return;
if((t-count_-abs(a-ex)-abs(b-ey))%2==1) return; //奇數偶數剪枝
for(int i=0;i<4;i++)
}}int main()}}
ok= false;
//可走方塊是否比時間多,最短時間是否比t小,奇偶剪枝
if(n*m-wabs(sx-ex)+abs(sy-ey)>t||(t-abs(sx-ex)-abs(sy-ey))%2==1)
//dfs
count_=0;
visit[sx][sy]=1;
dfs(sx,sy);
if(ok) printf("yes\n");
else
printf("no\n");
}return
0;}
杭電ACM1010 深度優先搜尋 奇偶剪枝
乙個月之前,資料結構看完了深度和廣度搜尋,做這個搜尋題目的時候,總是超時,後來才知道可以進行剪枝可以判斷是否可以在t的時間內到達指定的地點。杭電1010這一題的題目大意是 一條狗進入乙個神奇的迷宮,一秒走乙個空白的地方,狗走過的地方會消失,也就是說狗不能往回走,門在t秒之後開啟,且開啟很短的時間,狗...
回溯法遵循深度優先嗎 深度優先搜尋(回溯法)
事實上,深度優先搜尋屬於圖演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次.舉例說明之 下圖是乙個無向圖,如果我們從a點發起深度優先搜尋 以下的訪問次序並不是唯一的,第二個點既可以是b也可以是c...
C 火柴棒問題 深度優先搜尋 剪枝
有乙個由火柴棒作為邊組成的n n 的格仔。n 5 按照下圖,給火柴棒編號。這是 n 3 的情況,其它情況類似 這是此圖鏈結 現在將移除某些火柴棒的狀態作為初始狀態,需要再移除一些火柴棒,以保證圖中乙個正方形也沒有。請求出所有需要移除火柴棒的最少根數。輸入格式 第一行乙個整數 t 表示測試資料個數。對...