codevs1004四子連棋

2022-04-06 04:14:29 字數 2609 閱讀 3782

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

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

●○●○

●●○●

○○●○

輸入描述 input description

從檔案中讀入乙個4*4的初始棋局,黑棋子用b表示,白棋子用w表示,空格地帶用o表示。
輸出描述 output description

用最少的步數移動到目標棋局的步數。

樣例輸入 sample input

bwbo

wbwb

bwbw

wbwo

樣例輸出 sample output

#include#include

#include

using

namespace

std;

int map[5][5

],ans,flag;

int dx[5]=,dy[5]=;

inline

void dfs(int ch, int

deep);

inline

void swap(int &a,int &b)

bool check()//

判斷是否符合條件

if (map[1][1]==map[2][2]&&map[2][2]==map[3][3]&&map[3][3]==map[4][4])return1;

if (map[1][4]==map[2][3]&&map[2][3]==map[3][2]&&map[3][2]==map[4][1])return1;

return0;

}void move(int ch,int deep,int x,int y) //

ch表示下乙個顏色

}}void dfs(int ch,int

deep)

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

for(int j=1;j<=4;j++)

if(map[i][j]==-1

) move(next,deep,i,j);

}int

main()

for(ans = 1; flag == 0; ans++)

printf(

"%d\n

",ans);

}

dfs

#include#include

#include

#include

#define maxn 5001

using

namespace

std;

struct

node

;node e[5000

];int mm[5][5],tep[maxn],head=0,tail=1,ans=maxn,flag;

int dx[5]=;

int dy[5]=;

maphash;

bool equ(int a1,int a2,int a3,int a4)

bool judge(int

w)

if(equ(e[w].map[1][1],e[w].map[2][2],e[w].map[3][3],e[w].map[4][4]))return1;

if(equ(e[w].map[1][4],e[w].map[2][3],e[w].map[3][2],e[w].map[4][1]))return1;

return0;

}void

copy()

bool check(node x)//

hash判重

void

bfs()

else

tep[tail]=tep[head]+1

;

if(judge(tail))

if(check(e[tail])) tail--;}}

}if(flag)break

; }

}}int

main()

for(int k=1;k)

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

for(int j=1;j<=4;j++)

flag=0;ans=maxn;

e[1].f=-1

; bfs();

hash.clear();

for(int k=1;k)

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

for(int j=1;j<=4;j++)

head=0;tail=1;flag=0

; e[

1].f=1

; bfs();

//因為一開始走黑棋白棋結果可能不一樣,所以兩遍

printf("

%d\n

",ans);

return0;

}

bfs

codevs 1004 四子連棋

1004 四子連棋 時間限制 1 s 空間限制 128000 kb 題目等級 gold題解 題目描述description 在乙個4 4的棋盤上擺放了14顆棋子,其中有7顆白色棋子,7顆黑色棋子,有兩個空白地帶,任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰的空格,這叫行棋一步,黑白雙方交替走棋...

codevs 1004 四子連棋

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

Codevs 1004 四子連棋

時間限制 1 s 空間限制 128000 kb 題目等級 gold 在乙個4 4的棋盤上擺放了14顆棋子,其中有7顆白色棋子,7顆黑色棋子,有兩個空白地帶,任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰的空格,這叫行棋一步,黑白雙方交替走棋,任意一方可以先走,如果某個時刻使得任意一種顏色的棋子形...