洛谷月試合ソ連人について

1818 ワード

この問題については、暴力捜査で、捜査は遊びました.
この問題は体面が八皇后とよく似ているように見えますが、この問題は八皇后より簡単だと思います.いい加減にしろ
次は本題に入ります.
まず入力して、Bの点を記録して、R点を記録して、後で検索しやすいです.
次に4つの方向から検索し、現在のノードに駒がある場合は、直接スキップします.
具体的な説明はコードを参照してください.
#include
#include
#include
#include
using namespace std;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch'9')
	{
		if(ch=='-')
		f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
int a[75][3],num,c[75],last[9][9];
int bx[5]={0,-1,-1,1,1},by[5]={0,-1,1,1,-1};//           
int rx[5]={0,-1,0,1,0},ry[5]={0,0,1,0,-1};//            
char b;
void dfs(int x,int y,int jx,int jy)
{
	if(last[x+jx][y+jy]==1||x+jx<1||x+jx>8||y+jy<1||y+jy>8)//        ,        ,     
	{
		return ;
	}
	else //         
	{
		last[x+jx][y+jy]=2;//2        ,1         。                 
		dfs(x+jx,y+jy,jx,jy);
	}
}
int main()
{
	for(int i=1;i<=8;i++)
	{
		for(int j=1;j<=8;j++)
		{
			cin>>b;
			if(b=='B')
			{
				a[++num][1]=i;//         
				a[num][2]=j;//         
				c[num]=1;//1  B    
				last[i][j]=1;//  last[i][j]        ,              
			}
			if(b=='R')
			{
				a[++num][1]=i;
				a[num][2]=j;
				c[num]=2;//2  R     
				last[i][j]=1;//   
			}
		}
	}
	for(int i=1;i<=num;i++)
	{
		if(c[i]==1)
		{
			for(int j=1;j<=4;j++)//   B  R   4    
			{
				dfs(a[i][1],a[i][2],bx[j],by[j]);//        bx,by 
			}
		}
		if(c[i]==2)
		{
			for(int j=1;j<=4;j++)
			{
				dfs(a[i][1],a[i][2],rx[j],ry[j]);//         rx,ry 
			}
		}
	}
	for(int i=1;i<=8;i++)
	{
		for(int j=1;j<=8;j++)
		{
			if(last[i][j]!=0)//                 ,     
			cout<