hdoj1175 連連看(dfs 剪枝)

2022-08-19 14:06:09 字數 1133 閱讀 6905

處理連連看問題。

要求拐彎方向不多於兩次。剪枝很重要!!!

用dir記錄當前方向。orz,居然沒想到。

1 #include2 #include3 #include4

#define maxn 1005

5using

namespace

std;

6const

int dx=,dy=;

7int

map[maxn][maxn],v[maxn][maxn];

8int

n,m,flag,x1,x2,y1,y2;

9void dfs(int x,int y,int num,int

dir)

17if (map[x][y]!=0

)//當前不為零且不為起點,即路徑上有棋子

21 v[x][y]=1;22

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

27 v[x][y]=0;28

return;29

}30intmain()38}

39 cin >>t;

40while (t--)//

起點與終點相同不能消去

47if (map[x1][y1]!=map[x2][y2] || !map[x1][y1] || !map[x2][y2])//

起點與終點不同,或起點或終點位置沒有棋子

51if (x1<0 || x1>=n || y1<0 || y1>=m || x2<0 || x2>=n || y2<0 || y2>=m)//

所給座標超出當前範圍

55 flag=0

;56 memset(v,0,sizeof

(v));

57for (int i=0;i)

60if (flag) cout << "

yes\n";

61else cout << "

no\n";

62}63}

64return0;

65 }

hdoj 1175 連連看 dfs 剪枝

題目大意 題目給出一副連連看的圖形,其中0代表沒有物品,其餘數字代表該位置的物品,規定,每次消除所經過的路徑不能超過兩次專向。另外,不能在圖外進行轉向。問,對於q個詢問,是否能夠消除。每乙個詢問都是對於初始圖而言的,解題思路 dfs 剪枝。其實沒什麼好說的,有幾個要注意的地方,第乙個是判重,第二個是...

HDU 1175連連看 dfs記錄方向 強力剪枝

題目大意 與連連看類似,不過不同的是它不能從外面繞過去,這相當於降低了題目難度。需要注意的是,如果你在搜尋過程中遇到了和起點位置一樣的數,但它不是終點位置的話需要返回。include includeusing namespace std const int maxn 1010 int vis max...

hdu 1175 連連看 dfs搜尋

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