HDU 1175 連連看 DFS 剪枝

2021-06-25 15:30:09 字數 855 閱讀 6385

題目大意:連連看,中文題就不解釋了!

解題思路:好坑的題呀,除錯了我n多個小時,怎麼都不對,後邊各種中間結果輸出都用上了,交上去一直wa。早上過來重新寫了一次,居然a了。完全不能理解呀!說下這個題吧,主要是對各個條件的剪枝上,其它都很簡單。在剪枝上的分析就不具體說了,**給了很詳細的注釋了,各種細節注意就行,詳見code。

code:

#include #include #include using namespace std;

const int maxn = 1000+10;

int n,m,q;

int map[maxn][maxn],vis[maxn][maxn];

int sx,sy,ex,ey,flag;

int dir[4][2]=,,,};

void dfs(int x,int y,int cnt,int d) //滿足條件,標記返回

for(int i=0;i<4;i++)

}}int main() //起點和終點在同一點,則輸出no

if(map[sx][sy]==0 || map[ex][ey]==0 || map[ex][ey]!=map[sx][sy])//起點和終點為0,或者不相等,則輸出no

memset(vis,0,sizeof(vis)); //這裡初始化訪問陣列,因為要多次詢問,因此要每次都初始化的

flag=0; //答案標記

vis[sx][sy]=1;

dfs(sx,sy,0,-1);

if(flag) printf("yes\n");

else printf("no\n");}}

return 0;

}

hdu 1175 連連看 dfs搜尋

題目大意 因為是中文題,就不多說了。題目對兩塊棋子能否消除的限制為 兩者之間的連線不能轉向2次以上,並且不能穿過其他棋子.個人想法 dfs.如果能滿足題目的條件從一塊搜尋到另一塊,那麼就輸出yes,否則no。但這邊不知道為何,如果沒有在轉向兩次以後進行剪枝 接下去就只朝乙個方向走 的話,就是超時.結...

HDU 1175 連連看 搜尋,dfs

類似於迷宮問題,主要就在轉折的處理上,在這裡可以有乙個強剪枝,具體見 參考部落格 感謝!include include include include using namespace std int map 1010 1010 int tmap 1010 1010 int n,m,q int x1,...

搜尋 HDU1175 連連看

題目 分析 這道題看到的第一反應應該就是bfs或者dfs,裸的dfs bfs顯然會tle,所以我就想用a 不過好像並不好寫啟發函式。列舉步數不行,就列舉邊吧。因為允許有兩次轉折,所以最多有三條邊列舉中間的一條邊,然後進行check,這道題只用了兩個for迴圈就ac了。include include ...