马的遍历问题-回溯法应用-ACM
马的遍历问题
在n*m的棋盘中,马只能走“日” 字。马从位置(x,y)处出发,把棋盘的每一格都走一次,且只走一次。找出所有路径。
问题解的搜索空间?
棋盘的规模是n*m,是指行有n条边,列有m条边。
马在棋盘的点上走,所以搜索空间是整个棋盘上的n*m个点。
用n*m的二维数组记录马行走的过程,初值为0表示未经过。
在寻找路径过程中,活结点的扩展规则?
对于棋盘上任意一点A(x,y),有八个扩展方向:
A(x+1,y+2),A(x+2,y+1)
A(x+2,y-1),A(x+1,y-2)
A(x-1,y-2),A(x-2,y-1)
A(x-2,y+1),A(x-1,y+2)
为构造循环体,用数组fx[8]={1,2,2,1,-1,-2,-2,-1},fy[8]= {2,1,-1,-2,-2,-1,1,2}来模拟马走“日”时下标的变化过程。
不出边界;
每个点只经过一次。
棋盘点对应的数组元素初值为0,对走过的棋盘点的值置为所走步数,起点存储“1”,终点存储“n*m”。
函数check,检查当前状态是否合理
0 0
1 90 82 75 88 83 78 85 89
71 74 2 64 81 76 87 84 79
44 55 72 69 3 63 80 77 86
73 70 45 56 65 68 4 62 59
54 43 66 51 46 57 60 49 5
41 37 53 31 67 50 47 58 61
35 12 42 38 52 30 25 6 48
20 39 36 13 32 23 16 29 26
11 34 21 18 9 14 27 24 7
40 19 10 33 22 17 8 15 28
#include <stdio.h>
#include <string.h>
int matrix[10][9];
int journey = 1;
int step_x[]={1,2,2,1,-1,-2,-2,-1},step_y[]={2,1,-1,-2,-2,-1,1,2}; void outMatrix(){
int i,j;
for (i=0;i<10;i++)
{
for (j=0;j<9;j++)
{
printf("%-2d ",matrix[i][j]);
}
printf("\n");
}
} bool outofbounds(int x,int y){
return x < 0 || y < 0 || x >= 10 || y >= 9;
} bool isCome(int x,int y){
return matrix[x][y];
} void gotoend(int x, int y ){
if(journey>90) return;
int i;
matrix[x][y]=journey++; //当前是第几步
for (i = 0;i<8;i++)
{
int next_x = x+step_x[i];
int next_y = y+step_y[i];
if(!outofbounds(next_x,next_y) && !matrix[next_x][next_y]){ gotoend(next_x,next_y);
}
}
} int main(){
int start_x,start_y;
int i;
scanf("%d%d",&start_x,&start_y);
for (i = 0;i<10;i++) {
memset(matrix[i],0,sizeof(matrix[0]));
}
gotoend(start_x,start_y);
outMatrix();
return 0;
}
马的遍历问题-回溯法应用-ACM的更多相关文章
- 洛谷 P1443 马的遍历
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...
- leetcode 236. 二叉树的最近公共祖先LCA(后序遍历,回溯)
LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百 ...
- 最少步数&P1443 马的遍历
1330:[例8.3]最少步数 s数组:记录(1,1)到达每一点需要的最少步数 s[1][1]自然为 0,其余初始化为 -1 que数组:que[#][1] 表示(1,1)可到达点的 x 坐标 q ...
- 【bfs】洛谷 P1443 马的遍历
题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...
- 马的遍历 洛谷 p1443
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 洛谷P1443 马的遍历
https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...
- [luoguP1443]马的遍历
首先来看一下题目描述: 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋 ...
- 【洛谷】P1443 马的遍历
题目:https://www.luogu.org/problemnew/show/P1443 简单的BFS模板题——因为我写出来了. 分析过程: n*m矩阵,用二维数组 数据不大,二维数组稳了 先把二 ...
- 【洛谷P1443 马的遍历】
题目链接(%%%jyy大佬) 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数 ...
随机推荐
- 广州Uber优步司机奖励政策(1月25日~1月31日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- [置顶] linux下让php支持mysql——寻找消失的mysql
问题 最近我都在忙一个课件录制系统.这两天发现其中服务器端的一个更新数据库的php脚本运行有问题,一些本应该是系统自带函数却无法运行.于是我展开了调查... 服务器端是centos系统,其中ph ...
- Apache SSL服务器配置SSL详解(转)
1.安装必要的软件 引用 我用的是apahce2.0.61版,可以直接官方提供的绑定openssl的apache. 文件名是:apache_2.0.61-win32-x86-openssl-0.9.7 ...
- linux进程调度之 FIFO 和 RR 调度策略---SYSTEMTAP
http://blog.chinaunix.net/uid-24774106-id-3379478.html http://blog.chinaunix.net/uid-24774106-id-337 ...
- linux上传下载软件
如何实现windows和linux之间的文件传输 (原文地址:http://hi.baidu.com/ying5420/item/439dee93f0f7fd1a934f41e2) 如果想从windo ...
- SA密钥长度、明文长度和密文长度
本文介绍RSA加解密中必须考虑到的密钥长度.明文长度和密文长度问题,对第一次接触RSA的开发人员来说,RSA算是比较复杂的算法,RSA的复杂度是因为数学家把效率和安全也考虑进去的缘故. 本文先只谈密钥 ...
- iOS AppIcon + launchImage+iPhone 屏幕分辨率相关知识
本文主要包含不同iOS 版本的尺寸,分辨率,以及appIcon,launchImage 对不同iOS 版本的适配问题 以下是主要主要的参考资料 https://developer.apple.com/ ...
- oracle:变长数组varray,嵌套表,集合
创建变长数组类型 ) ); 这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50) 更改元素类型的大小或精度 可以更改变长数组类型和嵌套表类型 元素的大小. ALTER TYPE ...
- HttpContext.Current
HttpContext. Response 直接这样写会报错 是因为 httpcontext没有提供response 这个静态的方法. 通过这样写就可以 ASP.NET还为它提供了一个静态属性Http ...
- Java_Activiti5_菜鸟也来学Activiti5工作流_之入门简单例子(一)
// VacationRequest.java /** * author : 冯孟活 ^_^ * dates : 2015年9月1日 下午10:32:58 * class : 演示简单的公司请假流程 ...