愿尔安然无恙


私信TA

用户名:H2130819045

访问量:12349

签 名:

向往星辰大海,喜欢落日晚风。

等  级
排  名 59
经  验 10466
参赛次数 16
文章发表 56
年  龄 20
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

不想改bug ^_^

解题思路:  用递归遍历骑士所有可能的情况;

注意事项:  国际象棋64个格子,8行8列分布(哈哈,自行脑补),注意递归终止条件 ;  

参考代码:

#include <iostream>
#include <algorithm>
using namespace std;
//国际象棋64个格子,8行8列分布        
int xx,yy;//定义初始横纵坐标 
int check(int x,int y)
{
    if(x>8||x<1||y>8||y<1)//超出棋盘边界,终止递归(返回0,对结果没有影响)
       return 0;
    if(x!=xx&&y!=yy)//棋子不在初始位置,且不超出棋盘边界,返回这种可能 
        return 1;
    return check(x+2,y+1)+check(x+2,y-1)+check(x-2,y+1)+check(x-2,y-1)+check(x+1,y+2)+check(x+1,y-2)+check(x-1,y+2)+check(x-1,y-2);
    //骑士每次都有8种选择(左,右)*(2格,1格)*(上,下)即 2*2*2=8 ; 
}
int main()
{
    int n;
    int vertical;
    char horizontal; 
    cin>>n;
    while(n--)
    {
 
        cin>>horizontal>>vertical;
        xx=horizontal-'a'+1;//把字母转化为数字,方便统一操作(1代表a,2代表b.......) 
        yy=vertical;
        cout<<check(xx,yy)<<endl; 
    }
    return 0;
} //dongdong


 

0.0分

0 人评分

  评论区