#include <iostream>
using namespace std;
int a[4][4];
bool judge(int user)
{
for(int i=1;i<=3;i++)
{
if(a[i][1]==user&&a[i][1]==a[i][2]&&a[i][1]==a[i][3])
return true;
if(a[1][i]==user&&a[1][i]==a[2][i]&&a[1][i]==a[3][i])
return true;
}
if(a[1][1]==user&&a[1][1]==a[2][2]&&a[1][1]==a[3][3])
return true;
if(a[1][3]==user&&a[1][3]==a[2][2]&&a[1][3]==a[3][1])
return true;
return false;
}
int blanknum()
{
int count=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(a[i][j]==0)
count++;
return count;
}
int cal(int user)
{
int count=blanknum();
int sum;
if(user==1)
sum=count+1;
else
sum=-(count+1);
return sum;
}
int dfs(int user)
{ //有输赢
if(user==1&&judge(2))
return cal(2);
if(user==2&&judge(1))
return cal(1);
if(!blanknum())//平局
return 0;
//模拟每一步
int maxn=-1000,minn=1000;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
{
if(a[i][j]==0)
{
a[i][j]=user;
if(user==1)
maxn=max(maxn,dfs(2));
if(user==2)
minn=min(minn,dfs(1));
a[i][j]=0;
}
}
if(user==1)
return maxn;
else
return minn;
}
int main()
{
int t;
int i,j;
cin>>t;
while(t--)
{
for(i=1;i<=3;i++)
for(j=1;j<=3;j++)
cin>>a[i][j];
cout<<dfs(1)<<endl;//Alice
}
return 0;
}
DFS暴力搜索搞定 不过DFS每次有返回值