记录编号 |
96397 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2002]过河卒 |
最终得分 |
100 |
用户昵称 |
752199526 |
是否通过 |
通过 |
代码语言 |
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;
}