Chess

49人阅读 评论(0)

Two chess pieces, a rook and a knight, stand on a standard chessboard 8 × 8 in size. The positions in which they are situated are known. It is guaranteed that none of them beats the other one.

Your task is to find the number of ways to place another knight on the board so that none of the three pieces on the board beat another one. A new piece can only be placed on an empty square.

#include<iostream>
using namespace std;

bool board[10][10];

void killrook(int m,int n)
{
for(int i=0;i<8;i++)
{
board[m][i]=board[i][n]=true;
}
}
void killknight(int m,int n)
{
board[m][n]=true;
if(m-2>=0)
{
if(n-1>=0)
board[m-2][n-1]=true;
if(n+1<8)
board[m-2][n+1]=true;
}
if(m+2<8)
{
if(n-1>=0)
board[m+2][n-1]=true;
if(n+1<8)
board[m+2][n+1]=true;
}
if(n-2>=0)
{
if(m-1>=0)
board[m-1][n-2]=true;
if(m+1<8)
board[m+1][n-2]=true;
}
if(n+2<8)
{
if(m-1>=0)
board[m-1][n+2]=true;
if(m+1<8)
board[m+1][n+2]=true;
}
}
int main()
{
//freopen("in.txt","r",stdin);
char c;
int i;
while(~scanf("%c%d",&c,&i))
{
int ans=0;
memset(board,0,sizeof(board));
killrook(i-1,c-'a');
killknight(i-1,c-'a');
getchar();
scanf("%c%d",&c,&i);
getchar();
killknight(i-1,c-'a');
for(int j=0;j<8;j++)
for(int k=0;k<8;k++)
{
if(board[j][k]==false)
ans++;
}
printf("%d\n",ans);
}
return 0;
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：3138次
• 积分：597
• 等级：
• 排名：千里之外
• 原创：59篇
• 转载：0篇
• 译文：0篇
• 评论：0条
友情链接
评论排行