HDU1175連連看 廣度優先搜尋BFS

2022-05-30 18:42:11 字數 2338 閱讀 6384

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 

12 #include 13 #include 14

using

namespace

std ;

15#ifdef debug

16#define bug assert

17#else

18#define bug //

19#endif

20#define zero

21int direc[4][2]=;//

方向依次定義為右左下上

22int a[1005][1005],visited[1005][1005

],m,n;

23//

a為輸入的2維向量,visited記錄該點是否被訪問過,同時記錄轉折次數,

24//

如果新的轉折次數小於以前訪問時的次數那麼更新,否則不更新。

25struct

node 26;

32 node start,end;//

開始和結束

33void bfs()//

寬度搜尋

3449

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

對轉交四個方向分別進行判斷 50

65}66}

67 cout<

<

69int

main()

7088

if(!a[start.x][start.y]||!a[end.x][end.y]||(a[start.x][start.y]!=a[end.x][end.y]))89

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

94for(int j=1;j<=m;j++)

95 visited[i][j]=int_max;

96bfs();97}

98}99100

return0;

101 }

view code

再加乙個自己寫的bfs

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 

11 #include 12 #include 13

using

namespace

std ;

14#ifdef debug

15#define bug assert

16#else

17#define bug //

18#endif

19#define zero

20#define maxnum 99999999

21int dir[4][2]=;

22int

n,m;

23int

i,j,k;

24int _flag=0;25

intxs,ys,x2,y2;

26int a[1001][1001]=zero;

27int visited[1001][1001]=zero;

28void dfs(int x,int y,int

di)29

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

4261}62

intmain()

6378}79

intt;

8081 scanf("

%d",&t);

82while(t--)

8391

}92 scanf("

%d%d%d%d

",&xs,&ys,&x2,&y2);

93if(a[xs][ys]!=a[x2][y2]||(xs==x2&&ys==y2)||!a[xs][ys]||!a[x2][y2])

9498 visited[xs][ys]=0

;99 dfs(xs,ys,-1

);100

if(_flag)

101 printf("

yes\n");

102else

103 printf("

no\n");

104}

105}

106return0;

107 }

view code

hdu 1175 連連看(深搜)

題意 判斷兩個位置的圖案能否消除 存在不超過兩次拐彎的連線 解題過程 1 一開始開vis記錄已走過的位置,每個位置只能走一次。這樣明顯不行,因為一些拐彎超過兩次的路線會與正確的路線重合,那麼正確的路線就行不通了。2 跳出條件設定的地方錯了,導致暴棧。1 include 2 include 3 def...

搜尋 HDU1175 連連看

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

hdu 1175 連連看 dfs搜尋

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