P2346 四子連棋 迭代加深

2021-08-28 15:17:41 字數 1395 閱讀 5526

難點是想到顏色可以為o,搜尋的過程中可能會把乙個o移動到另乙個o上面,然後搜尋的顏色引數就變成o就錯了。。。

也沒什麼好辦法,就是判到o直接跳過。。。

另外,要習慣把各種量寫在引數表裡,這樣能省很多**。。。也更好除錯

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define debug(x) cerr << #x << "=" << x << endl;

const

int maxn =

200000+10

;typedef

long

long ll;

char gra[10]

[10];

int ans,deg,x1,y1,x2,y2;

bool ***;

int dx=

;int dy=

;bool check()

for(

int j=

1; j<=

4; j++)if

(gra[1]

[1]== gra[2]

[2]&& gra[2]

[2]== gra[3]

[3]&& gra[3]

[3]== gra[4]

[4])

return true;

if(gra[1]

[4]== gra[2]

[3]&& gra[2]

[3]== gra[3]

[2]&& gra[3]

[2]== gra[4]

[1])

return true;

return false;

}bool id_dfs

(int x,

int deg,

int x1,

int y1,

int x2,

int y2,

char col)

for(

int i=

0; i<=

3; i++)if

(nx2 >=

1&& nx2 <=

4&& ny2 >=

1&& ny2 <=

4&& gra[nx2]

[ny2]

!= col && gra[nx2]

[ny2]

!='o')}

return false;

}int

main()

else}}

}while(1

)}return0;

}

洛谷P2346 四子連棋 題解 迭代加深搜尋

首先需要注意 題目描述 中說道的這句話 黑白雙方交替走棋,任意一方可以先走 然後我這邊用的是迭代加深搜尋解決的這個問題。我覺得迭代加深搜尋結合了dfs和bfs的優點 能夠像bfs一樣進行層次遍歷 使用回溯,相比bfs將所有狀態都加入佇列,迭代加深搜尋更省空間。示例 include using nam...

luogu2346 四子連棋

在乙個4 4的棋盤上擺放了14顆棋子,其中有7顆白色棋子,7顆黑色棋子,有兩個空白地帶,任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰的空格,這叫行棋一步,黑白雙方交替走棋,任意一方可以先走,如果某個時刻使得任意一種顏色的棋子形成四個一線 包括斜線 這樣的狀態為目標棋局。求用最少的步數移動到目標...

luogu P2346 四子連棋

第一次寫搜尋一遍過,紀念一下先。論結構體的妙用,直接傳乙個陣列簡直太方便。用乙個陣列記錄當前的局面,2為白色,1為黑色,0為空格,已走的步數,下一步那一方走,1為白色,1為黑色。然後把初始局面的兩種走法都加進佇列中,並標記,這裡一定要取模,3 16有四千多萬,bool陣列也不好受 當找到乙個空白的格...