今天覆習一下bfs,順便把之前一直沒a的四字連棋做了一下
這個題,我認為難點就在於移動棋子的一系列操作,太長了。
ps:不知道為啥,洛谷和codevs同時不待見getchar,在自己從codevs那裡拿了了些資料,手動測了一下,發現都對了,好迷
#include#include#include
#include
using
namespace
std;
struct
inter,qaq;
int ans,h[4]=,z[4]=;
bool ha[(100003)<<1
];char s[5
];queue
qwq;
inline
int hash(in
x)inline
bool cha(int i,int j,int k,int
l)inline
bool
pan()
if(cha(qaq.a[1][1],qaq.a[2][2],qaq.a[3][3],qaq.a[4][4
]))
return1;
if(cha(qaq.a[1][4],qaq.a[2][3],qaq.a[3][2],qaq.a[4][1
]))
return1;
return0;
}inline
bool can(int x,int
y)inline
void move(int x,int
y) }
}}inline
void
bfs()
ha[hash(qaq)]=1
; qwq.pop();
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
if(qaq.a[i][j]==2
) move(i,j);
}}int
main()
}ter.
as=0,ter.ne=0
; qwq.push(ter);
ter.ne=1
; qwq.push(ter);
bfs();
if(!ans)
ans=1
; printf("%d
",ans);
}
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顆黑色棋子,有兩個空白地帶,任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰的空格,這叫行棋一步,黑白雙方交替走棋,任意一方可以先走,如果某個時刻使得任意一種顏色的棋子形...