Chess

原创 2016年08月28日 15:20:48

链接:http://codeforces.com/problemset/problem/38/B

题目:

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.

题意:8*8棋盘,有一个马一个车,求再放一个马有多少种方法。

分析:数据很小,暴力把不可能的点去掉即可。注意放第二个马的时候不能踩到车。

看自己之前写的代码好蠢,这里马的8个走位可以用数组表示,类似bfs统一用一条语句判断越界,其他文章可能会有提到。

题解:

#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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Chinese_Chess

  • 2017-03-08 22:43
  • 145KB
  • 下载

China chess

  • 2015-07-14 22:25
  • 451KB
  • 下载

hdu 5742 chess SG函数

Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Subm...

Gumoku Chess

  • 2013-09-07 19:34
  • 12KB
  • 下载

Fritz Chess Benchmark4.3

  • 2015-09-03 20:34
  • 142KB
  • 下载

Chess

最近买到了《编程之美》这本书,此题是里面的一道题目  题目下过象棋的朋友都知道,双方的“将”和“帅”相隔遥远,且不能照面, 并且只能在各自的田字格中左右和上下移动,且只能移动一步。用A表示“将”,用B...

chess forge

  • 2013-01-25 21:41
  • 518KB
  • 下载

bzoj 1801: [Ahoi2009]chess 中国象棋 && bzoj 4806: 炮

意思就是同一行同一列炮的数量都不超过2个的方案数 dp[i][j][k]表示前i行有j列放了1个炮,k列放了2个炮的情况数 那么分情况讨论就好了 ①:不放炮:dp[i][j][k] += dp[i-1...

yf_chess_5.4.rar

  • 2013-01-19 21:24
  • 21.73MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)