给你一个矩阵,如何在其中找到一条通路呢?
创新互联-专业网站定制、快速模板网站建设、高性价比兴安网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式兴安网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖兴安地区。费用合理售后完善,十年实体公司更值得信赖。(是不是很凌乱?^_^)
在C++中怎么实现呢?
较好的解决方案:使用栈解决。
解决思路:
使用FILE*和open预先打开文件(绝对路径和相对路径1),注意断言。
正确读取文件,判断字符和空格,空格略过,读取字符。
从入口进入,每走一步,判断上下左右4个方向有无道路。
如果4个方向有路,则按次序先进入其中一条(将字符压栈push),并将所走过字符重置数字(后面回溯)。
如果4个方向没有,则出栈pop,即回溯,并再次判断。
逐次循环,直至判断下一个有效节点为边界时出栈,此时重置数字的路径即为通路。
注释:
1. 相对路径和绝对路径:绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入system32\cmd.exe。实际上,严格的相对路径写法应为.\system32\cmd.exe其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。
2. 此次实现中为简单实现采用相对路径,将写好的“迷宫”放在同一项目文件下进行打开即可
下面为C++代码的简单实现:
预处理:
预先打开文件及处理字符
从入口节点开始判断:
回溯算法:
最后一步,测试单元:
哈哈!完成,开始测试。
似乎很成功哦!但是并没有测试另一条路径(虽然不同),把刚才函数的上下左右重新调整一下,再运行:
依旧成功!
此时,就算我们的迷宫问题就算小小的解决了吧,当然,有兴趣的童鞋可以再加探索,比如如何达到最短测试路径等。就不在此一一深究了。毕竟这个看似小小的程序也是小弟耗费一番心思的成品,谢谢大家的阅读啦!有兴趣可以关注哦!嘿嘿。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。