题目
思路
把棋盘抽象成一个二分图(空位,黑子为左边点,白子为右边点),可以看出当空位不在最大匹配点上时,有必胜方法。
发现游戏操作具有不可退回的性质,所以当空格的移动轨迹上的点相当于被删除了。
对于每次(包括后手的操作)操作,我们考虑是否在删除原空格点后还有增广路,若没有则有必胜策略。
然后O(n)输出。
code:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int head[3601],c[3601],book[3601],wj[3601],q[4][2]={
{
1,0},{
0,1},{
-1,0},{
0,-1}},sx,sy,n,m,t,tot=1;
bool cor[60][60],fk[3601];
char u[60][60];
struct f{
int to,nxt;
} a[1000001];
void add(int x,int y)
{
a[tot].to=y