马踏飞燕(SDNU ACM-ICPC 2011复赛(2010级))

来源:互联网 发布:知乎 张国荣 编辑:程序博客网 时间:2024/04/28 07:04
#include<iostream>
#include<string.h>
using namespace std;
bool qp[101][101];
bool p = 0;
void MTFY(int s, int x, inty, int m, int n)
{
    intxx, yy;                           //必须定义新的变量,否则会影响到第一次以后的所有递归
    if(x == m&&y == n){ p = 1; return; }//走到燕的位置
    if(s == 4)return;                   //四步之内走不到燕的位置
    for(int i = 1; i <= 8; i++)
    {
        switch(i)                       //马走日的8种情况
        {
        case1:xx=x - 2; yy=y-1;   break;
        case2:xx=x - 2; yy=y+1;   break;
        case3:xx=x-1;   yy=y + 2; break;
        case4:xx=x+1;   yy=y + 2; break;
        case5:xx=x + 2; yy=y+1;   break;
        case6:xx=x + 2; yy= y-1;  break;
        case7:xx=x+1;   yy=y - 2; break;
        case8:xx=x-1;   yy=y - 2; break;
        }
        if(xx > 0 && xx <= 100 && yy > 0 && yy <= 100 && !qp[xx][yy])//不能出棋盘
        {
            qp[xx][yy] = 1;
            MTFY(s + 1, xx, yy, m, n);
            qp[xx][yy] = 0;
        }
    }
}
int main()
{
    intx, y, m, n;
    cin >> x >> y >> m >> n;
    memset(qp, 0,sizeof(qp)); //初始化数组
    MTFY(0, x, y, m, n);
    if(p)cout << "Y";
    elsecout << "N";
    return0;
}


链接网址:http://www.acmicpc.sdnu.edu.cn/Problem.aspx?pid=1025

(本人菜鸟,如有错误 敬请指出~谢谢)
0 0
原创粉丝点击