【跳马问题】蒟蒻题解

原题:传送门

上来先看(鬼畜的题目背景)题目描述。一看就是一个二维的深搜。

有芥末一条马,只会往右跳(话说它左腿系不系瘸了)日字形。

再一看数据范围,n,m<=18。等等,半棋盘不是只有4行6列吗?算了,跟\(OI\)讲什么道理啊。


好了,闲话完毕,步入正题。

#include<iostream>
using namespace std;

为了用坐标模拟马向右跳的动作,就要写一个坐标变化表。

int dx[4]={2,-2,1,-1},dy[4]={1,1,2,2};//模拟坐标x,y的变化规律,四个情况对应四个走法
int sum,m,n;

[敲显示屏]下面是深搜的灵魂,DFS函数。注意看好!!!

void dfs(int x,int y)//坐标X,Y
{
    if(x==n&&y==m)//当到达右上角(m,n)时,退出深搜
    {
        sum++;
        return;
    }
    else //否则模拟各种方向
        for(int i=0;i<=3;i++)
        {
            int tx=x+dx[i];
            int ty=y+dy[i];
            if(tx>=0&&tx<=n&&ty>=0&&ty<=m)//当没有超出边界时
                dfs(tx,ty);//继续DFS
        }
}

主程序

int main()
{
    cin>>n>>m;
    dfs(0,0);//从(0,0)位置开始寻找
    cout<<sum;
    return 0;
}

完美源码奉上:

#include<iostream>
using namespace std;

int dx[4]={2,-2,1,-1},dy[4]={1,1,2,2};
int sum,m,n;

void dfs(int x,int y)
{
    if(x==n&&y==m)
    {
        sum++;
        return;
    }
    else
        for(int i=0;i<=3;i++)
        {
            int tx=x+dx[i];
            int ty=y+dy[i];
            if(tx>=0&&tx<=n&&ty>=0&&ty<=m)
                dfs(tx,ty);
        }
}

int main()
{
    cin>>n>>m;
    dfs(0,0);
    cout<<sum;
    return 0;
}

附记

题目中的坐标有个很坑的地方,就是与初中数学的平面直角坐标系相冲突的先行后列思想,写程序时记得别搞混哈。

原文地址:https://www.cnblogs.com/clear-skies/p/12255281.html

时间: 2024-08-05 20:30:56

【跳马问题】蒟蒻题解的相关文章

【铺地毯】蒟蒻题解

原题:传送门 本蒟蒻的题解,让大神们见笑了! 从上图,大家可以发现一点:后铺的地毯要比先铺的位置要更靠上,这点很重要. \(OK\),开始进入代码讲解. #include<iostream> using namespace std; int a[10001],b[10001],g[10001],k[10001],n,i,j,d,x,y; int main() { cin>>n; for(d=1;d<=n;d++) cin>>a[d]>>b[d]>

dp专场的蒟蒻题解

前言:一直想练练dp,正好衣神弄了个训练赛..上次看cgold大佬的题解心血来潮所以自己试着写了第一次题解..可惜本蒟蒻的能力太差有两道题做不太出,只好搬运学习其它大佬的题解了.. a题 https://vjudge.net/contest/355951#problem/A 这题做题的过程十分痛苦 我又双叒叕看错题意了.. 以为是必须在对角线上 其实是随便n*n的都行.. 大概思路是从一个角开始更新,统计左边和上边相同的长度 #include <iostream> #include <c

【单词方阵】蒟蒻题解

题目:传送门 题外闲话 这道题是一个\(DFS\)(深度优先搜索 \(Depth\) \(Frist\) \(Sreach\))的题目,可是-我就是不想敲递归(我绝对不会告诉你我是想偷懒的),于是就有了这个程序和这篇题解-- 题目分析 首先,这是一个二维的题目,要寻找8个方向,如下图所示: (-1,-1) (-1, 0) (-1, 1) ( 0,-1) 在这向八个方向寻找 ( 0,1) (1,-1) (1,0) (1,1) 所以,要预处理八个方向: int dx[8]={-1,-1,-1,0,0

USACO 简易题解(蒟蒻的题解)

蒟蒻难得可以去比赛,GDOI也快到了,还是认真刷题(不会告诉你之前都在颓废),KPM 神犇既然都推荐刷USACO, 辣就刷刷. 现在蒟蒻还没刷完,太蒟刷得太慢,so 写了的搞个简易题解(没代码,反正NOCOW一堆) x_y_z(表示 Section x.y 的第z题) 1_1_1 这个..... ASCII码搞一搞就好了吧... 1_1_2 直接模拟,注意均分后剩下的钱还是他的 1_1_3 日期的题最难受了,直接模拟往下推就好了 1_1_4 枚举断开的位置,然后爆枚左右,注意处理 w 如果左右第

noip2013Day2T3-华容道【一个蒟蒻的详细题解】

描述 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面,华容道是否根本就无法完成,如果能完成,最少需要多少时间. 小 B 玩的华容道与经典的华容道游戏略有不同,游戏规则是这样的: 在一个 n*m 棋盘上有 n*m 个格子,其中有且只有一个格子是空白的,其余 n*m-1个格子上每个格子上有一个棋子,每个棋子的大小都是 1*1 的: 有些棋子是固定的,有些棋子则是可以移动的: 任何与空白的格子相邻(有公共的边)的格子上的棋子都可以移动到空白

蒟蒻ACMer回忆录 &#183; 一段弱校ACM的奋斗史

三年半的ACM生涯终于迎来了终点,退役之时,感慨万分,故写此文以纪念逝去的时光,那些为ACM拼搏的日子,那段弱校ACM的奋斗史. 三年半的ACM生涯,窝见证了CUMT从打铁到铜牌的突破,又见证了从铜牌到银牌的突破:见证了集训队员从3人发展到10余人,又见证了ACM实验室的落实. 三年半的ACM生涯,窝经历了太多,有Accepted时的欢笑,有Wrong Answer时的沮丧,有Time Limit Exceeded时的无奈,有Runtime Error时的尴尬,有打铁的失落,有拿牌的惊喜. 13

bzoj 4636: 蒟蒻的数列

4636: 蒟蒻的数列 Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一行一个整数N,然后有N行,每行三个正整数a.b.k. N<=40000 , a.b.k<=10^9 Output 一个数,数列中所有元素的和 Sample Input 4 2 5

BZOJ3786 星系探索 蒟蒻出题人给跪

本蒟蒻闲得蛋疼于是在BZOJ上加了一道水题,果然被瞬间水过... 只能说本蒟蒻实在是太弱了. Q:你为什么要写这篇博客? A:我只是为了水经验233.... 正常向的数据.题解.标程请自行传送下面的云盘... http://pan.baidu.com/s/1qWsMHM8 吐槽: 为什么本地不开O2 10s在OJ上开O2 还需要20+s啊!!!我本来不想卡常数好不好. 因为这个原因用数组实现数据结构被卡的请见谅...现在是40s应该卡不掉了. 另外如果发现自己被卡掉请重交一次.原因不解释. 为什

【BZOJ4916】神犇和蒟蒻 杜教筛

[BZOJ4916]神犇和蒟蒻 Description 很久很久以前,有一只神犇叫yzy; 很久很久之后,有一只蒟蒻叫lty; Input 请你读入一个整数N;1<=N<=1E9,A.B模1E9+7; Output 请你输出一个整数A=\sum_{i=1}^N{\mu (i^2)}; 请你输出一个整数B=\sum_{i=1}^N{\varphi (i^2)}; Sample Input 1 Sample Output 1 1 题解:哎?上面的那个东西好像一直是1?(废话),然后 设j=i/d,