题意
有一个
的棋盘,上面有白棋和黑棋,
代表没有棋子,
代表黑棋(
),
代表白棋(
)
被黑棋夹在中间的白棋会变黑棋,然后更新白棋的黑棋就不能再更新其他白棋,求下一步棋子后,最多能吃多少白棋
样例
输入
........
........
........
...BW...
...WB...
........
........
........
输出
1
思路
,枚举每一个空点,判断这个与这个空点相连的白子
代码
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int dx[9]={0,1,-1,1,1,-1,0,0,-1};
int dy[9]={0,1,1,-1,0,0,-1,1,-1};
int maxx,ans,sum;
char t[11][11];
int dfs(int c,int x,int y)
{
if (x<1 || x>8 || y<1 || y>8 || t[x][y]=='.') return -1e9;//判断出界
if (t[x][y]=='B') return 0;//找不到相对点
return dfs(c,x+dx[c],y+dy[c])+1;//继续搜
}
int main()
{
for (int i=1; i<=8; ++i)
for (int j=1; j<=8; ++j)
cin>>t[i][j];
for (int i=1; i<=8; ++i)
for (int j=1; j<=8; ++j)
{
for (int k=1; k<=8; ++k)
if (t[i][j]=='.')
{
int sum=dfs(k,i+dx[k],j+dy[k]);//找相对点
if (sum>0) ans+=sum;
}
maxx=max(maxx,ans),ans=0;//记录最大值
}
printf("%d",maxx);
}