時間限制: 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#includedfs#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);
}
#include#includebfs#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;
}
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顆黑色棋子,有兩個空白地帶,任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰的空格,這叫行棋一步,黑白雙方交替走棋,任意一方可以先走,如果某個時刻使得任意一種顏色的棋子形...