matlab语言实现一点到对角的路径PART2--优化与升级
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