搜尋 HDU1175 連連看

2022-05-20 08:56:12 字數 1329 閱讀 9194

題目

分析:這道題看到的第一反應應該就是bfs或者dfs,裸的dfs、bfs顯然會tle,所以我就想用a*,不過好像並不好寫啟發函式。

列舉步數不行,就列舉邊吧。因為允許有兩次轉折,所以最多有三條邊列舉中間的一條邊,然後進行check,這道題只用了兩個for迴圈就ac了。

**:

#include

#include

#include

using

namespace

std;

#define maxn 1000

int a[maxn+10][maxn+11],q,n,m,h[maxn+10][maxn+10],v[maxn+10][maxn+10],sx,sy,ex,ey;

bool check()

else

if(i>sy)

if(iif(h[ex][ey-1]!=h[ex][i-1])

continue;

}else

if(i>ey)

if(sy==i&&ey==i)

else

if(sy==i)

else

if(sx>ex)

}else

if(ey==i)

else

if(sxif(v[sx-1][i]!=v[ex-1][i])

continue;}}

else

if(v[b][i]!=v[a-1][i])

continue;

return

1; }

a=min(sy,ey);

b=max(sy,ey);

for(i=1;i<=n;i++)

else

if(i>sx)

if(iif(v[i-1][ey]!=v[ex-1][ey])

continue;

}else

if(i>ex)

if(sx==i&&ex==i)

else

if(sx==i)

else

if(sy>ey)

}else

if(ex==i)

else

if(syif(h[i][sy-1]!=h[i][ey-1])

continue;}}

else

if(h[i][b]!=h[i][a-1])

continue;

return

1; }

return0;}

int main()

scanf("%d",&q);

while(q--)

}}

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,...

HDU 1175 連連看 DFS 剪枝

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