【JZOJ】LAGNO

LAGNO

有一个 n n n*n 的棋盘,上面有白棋和黑棋,“ . . ”代表没有棋子,“ B B ”代表黑棋( B l a c k Black ),“ W W ”代表白棋( W h i t e White
被黑棋夹在中间的白棋会变黑棋,然后更新白棋的黑棋就不能再更新其他白棋,求下一步棋子后,最多能吃多少白棋

输入

样例输入
........
........
........
...BW...
...WB...
........
........
........
样例输出
1

思路

有一些人可能会以为成围棋,其实只要就是一个白棋相对的两边有黑棋就行了(包括对角线)
枚举 8 8 8*8 每一个点,然后进行搜索能吃多少白棋

#include<iostream>
#include<cstdio>
using namespace std;
const int dx[9]={0,1,1,1,0,0,-1,-1,-1};
const int dy[9]={0,1,0,-1,1,-1,1,-1,0};//八个方向
int n=8,m,ans,maxx;
char h[11][11];
int dfs(int t,int x,int y)
{
	if(x<1 || y<1 || x>8 || y>8 || h[x][y]=='.')return -1e9;//如果一边没有黑棋就无法吃掉白棋
	if(h[x][y]=='B')return 0;
	return dfs(t,x+dx[t],y+dy[t])+1;
}
int main()
{
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			cin>>h[i][j];
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n;++j)
		{
			for(int k=1;k<=n;++k)
				if(h[i][j]=='.')
				{
					int tt=dfs(k,i+dx[k],j+dy[k]);//相对的两个方向
					if(tt>0)ans+=tt;
				}
			maxx=max(ans,maxx);
			ans=0;
		}
	}
	printf("%d",maxx);
}

猜你喜欢

转载自blog.csdn.net/SSL_wujiajie/article/details/86694928