开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4091|回复: 10
收起左侧

[分享] [算法]机器人走方格

[复制链接]
发表于 2016-10-30 15:34:57 | 显示全部楼层 |阅读模式   北京市北京市
本帖最后由 mcard 于 2016-10-30 15:41 编辑

问题描述 - 机器人走方格(http://suo.im/x4sqx)
难度:☆
M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。
Input
第1行,2个数M,N,中间用空格隔开。(2 <= m,n <= 1000)Output
输出走法的数量。
Input示例
  1. 2 3
复制代码

Output示例
  1. 3
复制代码


涉及知识点:
1、取余数 —— 在易语言中对应“a % b”,例如:“20 % 3 = 6 余 2
2、枚举算法
3、for循环 —— 在易语言中对应“变量循环
4、二维数组


思路初涉:
1、为了一般化此问题,我们假设矩形大小为 “a*b
2<1>、  递归方式解题:矩阵中的格子(i, j),假设从(1, 1)到它的路径数量为path(i, j)
  1. path(i, j) = path(i-1, j) + path(i, j-1)
复制代码

很好理解,因为机器人只能向右或向下运动,因此它只能是从(i-1, j)或(i, j-1)
运动到(i, j)的,所以路径数量也就是到达这两个格子的路径数量之和。然后,
我们需要一个初始条件,也就是递归终止条件,是什么呢?可以发现,
当机器人在第一行时,不论它在第一行哪个位置,从(1, 1)到达那个位置都只有一条路径,
那就是一路向右;同理,当机器人在第一列时,也只有一条路径到达它所在位置。
2<2>、如果用纯数学的方法来解这道题目,大概也就是个高中排列组合简单题吧。
机器人从(1, 1)走到(m, n)一定要向下走m-1次,向右走n-1次,不管这过程中是怎么走的。
因此,一共可能的路径数量就是从总的步数(m-1+n-1)里取出(m-1)步,作为向下走的步子,
剩余的(n-1)步作为向右走的步子。
  1. C(m-1+n-1, m-1)=(m-1+n-1)! / ( (m-1)! * (n-1)! )
复制代码




代码片段(非最优算法):
  
子程序名返回值类型公开备 注
机器人走方格整数型 
参数名类 型参考可空数组备 注
I1整数型>=2
I2整数型
变量名类 型静态数组备 注
arr整数型0
i整数型 
j整数型 
time整数型 
time = 取启动时间 ()
重定义数组 (arr, 假, I1, I2)
变量循环首 (1, I1, 1, i)
arr [i] [1] = 1[/i]
[i].变量循环尾 ()[/i]
[i].变量循环首 (1, I2, 1, i)[/i]
[i]    arr [1]  = 1[/i]
[i].变量循环尾 ()[/i]
[i].变量循环首 (2, I1, 1, i)[/i]
[i]    .变量循环首 (2, I2, 1, j)[/i]
[i]        arr  [j] = arr [i - 1] [j] + arr  [j - 1][/i]
[i]        arr  [j] = arr  [j] % 1000000007[/i]
[i]    .变量循环尾 ()[/i]
[i].变量循环尾 ()[/i]
[i]输出调试文本 (“费时:”到文本 (取启动时间 () - time))[/i]
[i]返回 (arr [i - 1] [j - 1])[/i]
[i]




题目变式:
1、M * N的方格,从左上到右下画一条线。一个机器人从左上走到右下,只能向右或向下走。并要求只能在这条线的上面或下面走,不能穿越这条线,有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10007的结果。原链接:http://suo.im/guo5y) 难度:★★
2、四个机器人a b c d,在2 * 2的方格里,一开始四个机器人分别站在4个格子上,每一步机器人可以往临近的一个格子移动或留在原地(同一个格子可以有多个机器人停留),经过n步后有多少种不同的走法,使得每个毯子上都有1机器人停留。由于方法数量巨大,输出 Mod 10^9 + 7的结果。(原链接:http://suo.im/l4w0a)难度:★★★



这编辑器好垃圾呀。。。。。老是无故斜体,无故丢链接,无故改字体,无故改大小
我会不定时发几个算法,具体看个人时间和算法难度。
@junkboy




评分

参与人数 2好评 +1 精币 +7 收起 理由
客服部·风末 + 2 互相讨论,共同进步
冰点 + 1 + 5 互相讨论,共同进步

查看全部评分

本帖被以下淘专辑推荐:

 楼主| 发表于 2016-10-30 20:05:17 | 显示全部楼层   北京市北京市
不知道易代码出问题还是我浏览器解析有问题,反正我看的代码格式不对。。
.版本 2

.子程序 机器人走方格, 整数型
.参数 I1, 整数型, , >=2
.参数 I2, 整数型
.局部变量 arr, 整数型, , "0"
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 time, 整数型

time = 取启动时间 ()
重定义数组 (arr, 假, I1, I2)

.变量循环首 (1, I1, 1, i)
    arr [1] = 1
.变量循环尾 ()
.变量循环首 (1, I2, 1, i)
    arr [1] = 1
.变量循环尾 ()
.变量循环首 (2, I1, 1, i)
    .变量循环首 (2, I2, 1, j)
        arr [j] = arr [i - 1] [j] + arr [j - 1]
        arr [j] = arr [j] % 1000000007
    .变量循环尾 ()
.变量循环尾 ()
输出调试文本 (“费时:” + 到文本 (取启动时间 () - time))
返回 (arr [i - 1] [j - 1])
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 1 天

发表于 2016-11-1 22:52:58 | 显示全部楼层   广东省茂名市
好复杂,完全没明白
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)
发表于 2016-10-31 19:23:29 | 显示全部楼层   广东省汕头市
回复 支持 反对

使用道具 举报

发表于 2016-10-31 08:10:21 | 显示全部楼层   海南省三亚市
好复杂,完全没明白
回复 支持 反对

使用道具 举报

发表于 2016-10-30 20:50:57 高大上手机用户 | 显示全部楼层   湖北省荆州市
新手,来学习了,希望高手们多发教程
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2016-10-30 20:14:35 | 显示全部楼层   云南省昆明市
谢谢分享,,,
回复 支持 反对

使用道具 举报

结帖率:100% (26/26)
发表于 2016-10-30 19:41:45 | 显示全部楼层   浙江省杭州市
大神@我干嘛...
走格子还是走线
V3那题走格子的话  部分被线穿过的格子怎么算.....比如2*2是2种走法   2*3的话要是不能进入被对角线穿过的格子反而0种走法了

点评

不可以越过没说不可以踩着呀   北京市北京市  发表于 2016-10-30 20:02
回复 支持 反对

使用道具 举报

结帖率:63% (5/8)
发表于 2016-10-30 16:55:01 | 显示全部楼层   内蒙古自治区乌兰察布市
回复 支持 反对

使用道具 举报

签到天数: 19 天

发表于 2016-10-30 16:03:16 | 显示全部楼层   湖南省邵阳市
支持  用遗传算法不是更好
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表