matlab语言实现一点到对角的路径PART2--优化与升级

本文约 800 字,阅读需 2 分钟。

write by ai

原文:CSDN 链接 `n之前一篇blog已经说明了最基本的情况,这里不再罪赘述(008 matlab语言实现一点到对角的路径PART1

最近,对这个问题做了一些改进与优化。

1、改进:增加了不可到达点

其实这个还是很容易实现得,只需要检查路径中有没有这样不能到达的点,然后这样的路径不画出来就行了,改进部分代码如下:

CSDN_CODE_BLOCK_0_TOKEN

此外,由于上次是产生一个点画一个图导致图像效果很不好,路径没到终点(人眼视觉上)就切换到下一个路径了。所以将imagesc()的位置也调了一下,放在for循环之外,效果一下子好了不少:

文章配图

2、BUG1无法处理较大数据

以输入m=14, n=14为例,效果如下:

文章配图

之所以会出现这种错误是由于matlab默认使用双精度处理,

CSDN_CODE_BLOCK_1_TOKEN

这个代码是无法处理很大数的,如果输入更大的数,matlab会直接报错,比如对一个17位数取余数,会出现错误的结果

文章配图

这里由于水平有限,我也不能解释为什么,(欢迎大神前来指点哈),恐怕要等学的再精进一些才能解决这个问题。

此外还有一种错误如m=8,n=9(应该也是由于数字过大导致的异常,即不能展示所有路径):

文章配图

3、改进

后来想之所以做这些处理是因为,惯性思维导致只会用,取余数来分解每一位上的数字,而且对dec2bin()的结果是字符串不加思索,硬生生转换成数字,后来想想,应该充分开发MATLAB的奇淫技巧啊,于是代码变成了下面这样

CSDN_CODE_BLOCK_2_TOKEN

这是部分代码,最初的完整代码见最后。

这样m=14,n=14应该就没问题了,m,n的大小只受制于Max,看m=14,n14能正常运行了,开心!!!!

文章配图

这里,又留下了两个问题:

1、前面那个取余数的错误到底是为什么

2、如何使m,n满足更大的情况,而不出现奇怪的错误或崩溃,如:

CSDN_CODE_BLOCK_3_TOKEN

路漫漫其修远兮!!!

附(完整代码)

CSDN_CODE_BLOCK_4_TOKEN

总阅读量次。