记录编号 96397 评测结果 AAAAAAAAAA
题目名称 [NOIP 2002]过河卒 最终得分 100
用户昵称 Gravatar752199526 是否通过 通过
代码语言 C++ 运行时间 1.944 s
提交时间 2014-04-12 22:06:25 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<assert.h>
#include<cstring>
#include<vector>
#include<stack>
#include<queue>
#include<time.h>
using namespace std;
ifstream fin("pj024.in");
ofstream fout("pj024.out");
long long m,n,x,y,Count=0;
//马的移动格子
const int horse_x[9]={0,2,1,-1,-2,-2,-1,1,2};
const int horse_y[9]={0,1,2,2,1,-1,-2,-2,-1};
//卒的移动格子
const int soldier_x[2]={1,0};
const int soldier_y[2]={0,1};
//卒是否被马吃掉
bool horse(int x2,int y2)
{
	int x3,y3;
	for(int i=0;i<9;i++)
	{
		x3=x+horse_x[i];y3=y+horse_y[i];
		if(x3==x2&&y3==y2)return false;
	}
	return true;
}
//递归回溯算法
void soldier(int x1,int y1)
{
	for(int k=0;k<2;k++)
	{
		int x2=x1+soldier_x[k],y2=y1+soldier_y[k];//移动
		//判定是否越界
		if(y2<=m&&x2<=n)//不越界
		{
			if(horse(x2,y2)==false);//被马吃掉
			else//存活
			{
				if(x2==n&&y2==m)Count++;//到达目的地
				else soldier(x2,y2);//未达目的地
			}
		}
		else ;//越界
	}
}
int main()
{
	fin>>n>>m>>x>>y;
	soldier(0,0);
	fout<<Count<<endl;
	return 0;
}