马走日棋盘算法

马走日(dfs c++) 马在中国象棋以日字形规则移动。请编写一段程序,给定 n∗m大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。 阅读详情

马的遍历问题。在N*M的棋盘中,马只能走日字。马从位置(x,y)处出发,把
棋盘的每一格都走一次,且只走一次。找出所有路径。
输入 N M x y
如 5 5 3 3
5*5的棋盘 马从第3行第3列开始出发


import java.util.Scanner;

public class Main {
    private static int[][] next = new int[][] { { 1, 2 }, { 1, -2 }, { -1, 2 }, { -1, -2 }, { 2, 1 }, { 2, -1 },
            { -2, 1 }, { -2, -1 }, };
    private static int[][] book;
    private static int[][] map;
    private static int[][] a;//用来记录路径信息
    private static int n, m;
    private static int count = 0;//统计有多少种走法

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        int x = sc.nextInt() - 1;
        int y = sc.nextInt() - 1;
        map = new int[n][m];
        book = new int[n][m];
        a = new int[n][m];
        book[x][y] = 1;
        dfs(x, y, 1);
        System.out.println(count);
    }

    private static void dfs(int x, int y, int step) {
        // TODO Auto-generated method stub
        a[x][y] = step;
        if (step == n * m) {
            sop(a);
            count++;
        }
        int tx = 0, ty = 0;
        for (int i = 0; i < 8; i++) {
            tx = x + next[i][0];
            ty = y + next[i][1];
            if (tx < 0 || tx >= n || ty < 0 || ty >= m) {
                continue;
            }
            if (book[tx][ty] == 0) {
                book[tx][ty] = 1;
                dfs(tx, ty, step + 1);
                book[tx][ty] = 0;
            }
        }

    }

    private static void sop(int[][] arr) {
        // TODO Auto-generated method stub
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                System.out.print(arr[i][j] + "  ");
            }
            System.out.println();
        }
        System.out.println("---------");
    }

}
马走日(c++题解) 第一行为整数T(T < 10),表示测试数据组数。每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10)请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。马在中国象棋以日字形规则移动。 阅读详情

相关推荐

openjudge_2.5基本算法之搜索_8465:马走日

每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10)请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。j++)cout<<j<<“列\t”;每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。cout<<“地图”<<sx<<“,”<<sy<<endl;cout<<i<<“行\t”;

adam_life的博客 891

[计蒜客]马走日-c++

hi!大家好: 最近几天看了问答,发现有一些人在刷采纳,我就不说是谁了,建议官方处理一下; 好了,回到正题,最近几天,有个朋友问我了很多BFS的题 我打着打着就有点蒙,难的题对了,简单的题错了。。。就离谱; 于是聪明(nt)的作者就想做点别的找找自信; 随便选了一道题:马走日 题目介绍: 马在中国象棋以日字形规则移动。 请编写一段程序,给定 n×m大小的棋盘,以及马的初始位置(x, y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的...

孤城寡巷的博客 1464

马踏棋盘算法(骑士周游问题)——贪心算法优化

骑士周游问题 在8x8的国际棋盘上,按照马走日的规则,验证是否能够走遍棋盘。 解题思路 创建棋盘 chessBoard,是一个二维数组。 将当前位置设置为已经访问,然后根据当前位置,计算马儿还能走哪些位置,并放入到一个集合中(ArrayList),最多有8个位置,每走一步,就使用step+1。 遍历ArrayList中存放的所有位置,看看哪个可以走通,如果走通,就继续,走不通,就回溯。 判...

lu_long的博客 1579

马走日(C++)(深搜)(回溯)

马走日(C++)(深搜)(回溯) 附回溯基本框架

RuckySteve的博客 1793

poj2488题(骑士以马走日的方式走棋盘)

A Knight’s Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 40636 Accepted: 13807 DescriptionBackground The knight is getting bored of seeing the same black and white squares a

sinat_37848482的博客 1232

ACWing.1116 马走日(DFS)题解

ACWing.1116 马走日(DFS)题解 题目描述 马在中国象棋以日字形规则移动。 请编写一段程序,给定 n∗m 大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。 输入格式 第一行为整数 T,表示测试数据组数。 每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标 n,m,x,y。 输出格式 每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,若无法遍历棋盘上的所有点则输出 0。 数据范围 1≤T≤9, 1≤m

HeartFireY的博客 4985

深度解析马走日问题:从搜索回溯到棋盘遍历的算法实践

本文深度解析了经典的棋盘遍历问题——马走日,详细阐述了如何运用深度优先搜索与回溯算法解决该问题。文章从问题定义出发,逐步讲解了状态表示、方向数组、递归函数构建等核心实现步骤,并探讨了包括沃恩斯多夫规则在内的关键剪枝优化策略,旨在帮助读者透彻理解搜索回溯算法的精髓与实践技巧。

convnet3designer的博客 226

求解马走棋问题(回溯法)

求解马走棋问题(回溯法)

假技术Po主 931

马走日算法实战:用C++解决棋盘遍历问题的5个关键步骤

本文详细介绍了使用C++实现马走日算法的5个关键步骤,包括问题建模、DFS回溯框架设计、优化策略与剪枝技巧、完整实现与边界处理以及进阶思考。通过深度优先搜索和回溯算法,解决棋盘遍历问题,特别适合编程竞赛和算法学习。

rgv2345678的博客 239

深入探究马走日棋盘搜索算法:实战与优化

搜索算法是用于在图或树等数据结构中查找满足特定条件的节点的一类算法。在计算机科学中,搜索问题无处不在,比如在路径查找、符号处理、人工智能等领域都有应用。搜索算法根据搜索路径的不同,通常可以分为两类:深度优先搜索(DFS)和广度优先搜索(BFS)。深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法。该算法沿着树的深度遍历树的节点,尽可能深地搜索树的分支。当节点v的所有邻接节点都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。

weixin_42593549的博客 822

马走日:遍历棋盘算法的编程实践

图是由节点(顶点)和连接节点的边组成的数学结构。在图论中,图用于描述实体之间的关系,其中顶点表示实体,边则表示实体之间的关系或连接。图可以分为无向图和有向图:无向图:边没有方向,表示节点之间的无序关系。有向图:边有方向,表示节点间的有序关系,即边的方向性。此外,根据边是否有权重,图还可以分为加权图和非加权图:加权图:边具有权重,通常表示距离、成本等信息。非加权图:边的权重相等或不存在,通常只关注连接关系。

weixin_42589700的博客 926

马走日 回溯实现(不是最佳方案但能找出路径)

/* 马走日棋盘算法              例如: 棋盘大小为5*5 , 棋子马放的起始落子点为 ( 3 , 3 ) ; 算法需要搜索一条从 位置( 3 , 3 ) 开始的一条包括从(         1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) … ( 5 , 1 ) ,  ( 5 , 2 ) , ( 5 , 3 ) ,         ( 5 , 4 )

浪迹天涯的专栏 1324

手把手教你用Excel自动化处理G14大额风险暴露报表(含211版模板)

本文针对G14大额风险暴露报表(含211版)手工填报效率低、易出错的核心痛点,提供了一套基于Excel VBA的完整自动化解决方案。文章详细讲解了如何构建从数据采集、清洗、关联客户识别、风险暴露计算到自动化校验与归档的完整工作流,并附有可操作的代码示例,旨在帮助银行风控人员大幅提升报表处理效率与准确性。

weixin_29304985的博客 451

马走日c++

摘要: 本文探讨了如何计算中国象棋中马在给定棋盘上遍历所有点且不重复的路径数目。马遵循日字形移动规则,需从初始位置出发,覆盖全部棋盘点。通过深度优先搜索(DFS)算法,模拟马的移动并记录合法路径。具体实现中,使用二维数组标记访问状态,递归探索八个移动方向,回溯时恢复状态。对于每个测试用例(棋盘尺寸n×m及初始坐标x,y),程序输出可行路径总数。示例中,5×4棋盘从(0,0)出发的遍历路径为32种。该方案适用于小规模棋盘(n,m≤5),确保高效性和正确性。

gyvfhv的博客 775

Ubuntu系统下STM32开发环境搭建:从零配置CubeMX、VSCode与OpenOCD调试实战

本文详细介绍了在Ubuntu系统下搭建STM32开发环境的完整流程,包括CubeMX、VSCode和OpenOCD的安装配置。通过实战教程指导开发者从基础环境准备到工程创建与调试,提供高效的嵌入式开发解决方案,并分享常见问题解决方法。

potato的博客 942

ArcGIS数据处理必备技能:从地理坐标到UTM投影的面转栅格完整流程

本文详细介绍了在ArcGIS中从地理坐标到UTM投影的面转栅格完整流程,包括坐标系转换、像元大小设置及质量控制等关键步骤。通过实战案例和Python脚本示例,帮助用户解决常见问题并优化数据处理效率,特别适合需要精确GIS数据分析的专业人士。

weixin_42628688的博客 180

回溯法-马走日

vjudge 马走日 马在中国象棋以日字形规则移动。请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。 Input 第一行为整数T(T < 10),表示测试数据组数。每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 6, n < 6) Output 每组测试数据包含一行,为一个整数,表示马能

qq_45718060的博客 472

Skyworks SKY85331-11的Wi-Fi 6 (802.11ax)标准 2.4G 高功率WLAN前端模块解决方案

SKY85331-11是高度集成的2 GHz前端模块(FEM)包含2 GHz单刀双掷(SPDT)发送/接收(T / R)开关,2 GHz低噪声放大器(LNA)带旁路和一个2 GHz功率放大器(PA),用于大功率802.11ax应用程序和系统LNA和PA禁用功能可确保低漏电流 关闭模式。 包括一个集成的功率检测器以提供系统内的闭环功率控制。该设备提供Small (24-pin, 3 x 5 mm) (LGA)封装。 图1.引脚配置和封装如图所示 图2.信号引脚分配和功能引脚描述 图...

zhangbao19890622的博客 4510

马走日问题(Java版)

这里写目录标题问题描述算法描述参考代码 问题描述 给定 n*m 大小的棋盘,起点坐标(x, y),找出从起点开始,将棋盘所有位置走一遍,求总的方案数Sum. 限制条件:只能走日字型. 算法描述 我们都听过象棋中的马走日象走田,对于某一位置的棋子,总有8个方向可以选择,只有走日字且不超越棋盘大小,即可! 方向设定 // 8个方向 int[] orient = {-1, 2, 1, -2, -1, -2, 1, 2, -1}; 添加标记数组 vis[][],标记某条路径(多叉树分支)的点,是否走过

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 1944

手把手教你用高频注入法辨识永磁同步电机电感参数(附MATLAB仿真)

本文详细介绍了高频注入法在永磁同步电机电感参数辨识中的工程实践与MATLAB仿真指南。通过高频信号注入法,无需拆解电机即可在线精确测量Ld和Lq参数,适用于电动汽车驱动和工业伺服等高精度控制场景。文章包含信号设计、硬件实现、解调算法及完整MATLAB仿真模型构建,帮助工程师快速掌握这一关键技术。

orange的博客 292

AI智能体丨使用Coze一键生成爆款书单视频,3个月内获赞131.1w!(附保姆级教程)

这篇教程详细介绍了如何使用扣子(Coze)平台的AI智能工作流批量制作爆款书单视频。通过自动化流程,只需1-2分钟即可生成45-50秒的书单视频,效率提升近百倍。工作流包含文案生成、音频合成、图片素材获取、视频剪辑等全流程,支持随机生成8本书单、自动提取金句、智能配音等功能。教程提供了完整的操作步骤,包括剪映草稿配置、特效添加等细节,并附体验链接和示例效果。最终生成的视频包含书单展示、金句字幕、背景音乐等元素,适合书单号运营者快速批量产出内容。

李同学Lino的博客 2355

关于棋盘马走“日”字问题的回溯算法实现

<br />1. 回溯法基本思想 <br /><br />   回溯法是在包含问题的所有解得解空间树(或森林)中,按照深度优先的策略,从根结点出发搜索解空间树。 <br />算法搜索至解空间树的任一结点时,总是先判断该结点是否满足问题的约束条件。如果满足进入该子树,继续 <br />按照深度优先的策略进行搜索。否则,不去搜索以该结点为根的子树,而是逐层向其祖先结点回溯。 <br /><br />   回溯法在用来求解问题的所有解时,要回溯到根,且根结点的所有可行的子树都已被搜索遍才结束。而回溯法 <br /

goustzhu地盘 1万+

手把手安装GNN必备库 —— pytorch_geometric

PyG全称是Pytorch Geometric,它是一个基于Pytorch构建的库,可以帮助用户快速构建和训练自己的图神经网络模型。PyG中实现了很多先进(state of the art)的GNN模块,例如GCN、GraphSage、GAT、SGC、GIN等等。此外,PyG中还包含了大量的benchmark图数据集、丰富的图数据操作方法、支持多GPU。

m0_51339444的博客 2381
上一篇: 【蓝桥杯】连续奇数和
下一篇: Fi数列
Tenyearsme
博客等级 码龄11年 32粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值