HDOJ1175連連看 DFS

      網友投稿 875 2022-05-28

      連連看

      Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)

      Total Submission(s): 25178 Accepted Submission(s): 6230

      Problem Description

      “連連看”相信很多人都玩過。沒玩過也沒關系,下面我給大家介紹一下游戲規則:在一個棋盤中,放了很多的棋子。如果某兩個相同的棋子,可以通過一條線連起來(這條線不能經過其它棋子),而且線的轉折次數不超過兩次,那么這兩個棋子就可以在棋盤上消去。不好意思,由于我以前沒有玩過連連看,咨詢了同學的意見,連線不能從外面繞過去的,但事實上這是錯的。現在已經釀成大禍,就只能將錯就錯了,連線不能從外圍繞過。

      玩家鼠標先后點擊兩塊棋子,試圖將他們消去,然后游戲的后臺判斷這兩個方格能不能消去。現在你的任務就是寫這個后臺程序。

      Input

      輸入數據有多組。每組數據的第一行有兩個正整數n,m

      (0 < n<=1000,0< m<1000),分別表示棋盤的行數與列數。在接下來的n行中,每行有m個非負整數描述棋盤的方格分布。0表示這個位置沒有棋子,正整數表示棋子的類型。接下來的一行是一個正整數q(0< q<50),表示下面有q次詢問。在接下來的q行里,每行有四個正整數x1,y1,x2,y2,表示詢問第x1行y1列的棋子與第x2行y2列的棋子能不能消去。n=0,m=0時,輸入結束。

      注意:詢問之間無先后關系,都是針對當前狀態的!

      Output

      每一組輸入數據對應一行輸出。如果能消去則輸出”YES”,不能則輸出”NO”。

      Sample Input

      3 4

      1 2 3 4

      0 0 0 0

      4 3 2 1

      4

      1 1 3 4

      1 1 2 4

      1 1 3 3

      2 1 2 4

      3 4

      0 1 4 3

      0 2 4 1

      0 0 0 0

      2

      1 1 2 4

      1 3 2 3

      0 0

      Sample Output

      YES

      NO

      NO

      NO

      NO

      YES

      必須要有的剪枝就是:

      當轉向2次后,來判定當前的點和終點 是否在同一條線路,如果不在同一條線路就直接返回。

      /**判斷拐角的:建立兩個拐角變量,記錄未開始拐角的坐標lastx,lasty, 如果出現拐角的話,條件就是:x!=lastx&&y!=lasty, 這樣就可以拐角疊加了,另外更新一下當前的拐角坐標即可.**/ #include #include #include #include #include #include using namespace std; int n,m; int mapp[1010][1010]; int flag[1010][1010]; int q; int s1,t1,s2,t2; int tk;/**拐角的數量**/ int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; int lastx,lasty; int dfs(int a,int b) { if(a==s2&&b==t2&&tk<=2) return 1; if(tk==2&&a!=s2&&b!=t2) return 0; for(int i=0;i<4;i++) { int tx=a+dir[i][0]; int ty=b+dir[i][1]; /**路上除了碰到終點和0,其余的都是路障**/ if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&(mapp[tx][ty]==0||(tx==s2&&ty==t2))&&flag[tx][ty]==0) { /**開始計算拐角,如果拐角了,修改拐角坐標,并疊加 超過2的拐角不DFS下去,反之DFS下去 沒有發生拐角的同樣可以dfs下去**/ if(tx!=lastx&&ty!=lasty&&tk<2) { tk++; int tmpx=lastx,tmpy=lasty; lastx=tx;lasty=ty; flag[tx][ty]=1; if(dfs(tx,ty)==1) return 1; tk--; lastx=tmpx,lasty=tmpy; flag[tx][ty]=0; } else if(tx==lastx||ty==lasty) { flag[tx][ty]=1; if(dfs(tx,ty)==1) return 1; flag[tx][ty]=0; } } } return 0; } int main() { while(~scanf("%d%d",&n,&m)&&(n||m)) { for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&mapp[i][j]); flag[i][j]=0; } } scanf("%d",&q); for(int i=0;i

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      HDOJ1175連連看 DFS

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      5G游戲

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:ES數據寫入調優1
      下一篇:16.3 主引導目錄(MBR)結構及作用
      相關文章
      欧美亚洲精品一区二区| 亚洲综合在线视频| 亚洲AV乱码久久精品蜜桃| 国产成人精品久久亚洲高清不卡| 亚洲AV无码乱码在线观看代蜜桃| 久久精品国产亚洲av麻豆小说| 亚洲成AV人片在| 亚洲av伊人久久综合密臀性色| 亚洲精品国产品国语在线| 国产偷v国产偷v亚洲高清| 亚洲国产成人一区二区精品区| 亚洲AV永久无码区成人网站| 亚洲欧洲成人精品香蕉网| 国产亚洲无线码一区二区| 亚洲AV综合色一区二区三区| 亚洲AV无码专区国产乱码4SE| 亚洲电影国产一区| 亚洲综合亚洲国产尤物| 亚洲国产精品成人综合久久久| 亚洲精品亚洲人成在线播放| 亚洲AV男人的天堂在线观看| 精品亚洲国产成人| 亚洲日韩AV一区二区三区中文| 亚洲AV无码一区二区三区性色| 在线亚洲v日韩v| 中文字幕亚洲日韩无线码| 亚洲乱码无码永久不卡在线| 亚洲Av无码专区国产乱码DVD | 亚洲综合小说久久另类区| 亚洲人成激情在线播放| 亚洲av永久无码嘿嘿嘿| 亚洲熟妇成人精品一区| 亚洲熟妇丰满xxxxx| 亚洲国产人成中文幕一级二级| xvideos亚洲永久网址| 黑人大战亚洲人精品一区| 精品久久亚洲一级α| 亚洲国产天堂久久久久久| 亚洲精品美女久久久久99| 亚洲高清无在码在线电影不卡| 亚洲综合伊人制服丝袜美腿|