已解决
牛客题霸 -- HJ43 迷宫问题
来自网友在路上 176876提问 提问时间:2023-10-30 10:03:44阅读次数: 76
最佳答案 问答题库768位专家为你答疑解惑
解题步骤;
参考代码:
//最短路径下标
vector<vector<int>> MinPath;
//临时路径
vector<vector<int>> tmp;
int row = 0;
int col = 0;
void FindMinPath(vector<vector<int>>& nums, int i, int j)
{nums[i][j]=1;tmp.push_back({i,j});//说明这条路径已经走通if(i==row-1&&j==col-1){//第一次,即MinPath.size()==0时也要给MinPath赋值//否则最终的MinPath就会等于0了if(MinPath.size()==0||tmp.size()<MinPath.size()){MinPath=tmp;}return;}//无论是向哪个方向走,都必须要确保这个方向的位置能走,//保证不越界并且这个方向的值不为1,否则就不能走//向上if(i-1>=0&&nums[i-1][j]==0){FindMinPath(nums,i-1,j);}//向下if(i+1<row&&nums[i+1][j]==0){FindMinPath(nums,i+1,j);}//向左if(j-1>=0&&nums[i][j-1]==0){FindMinPath(nums,i,j-1);}//向右if(j+1<col&&nums[i][j+1]==0){FindMinPath(nums,i,j+1);}//经过该点的四个方向都已经走过了,此时应该回溯,即//把这个点从tmp中删除掉,并把该点的值恢复为原来的0,//因为原来一定是0,如果原来是1是不会进来这一层递归的tmp.pop_back();nums[i][j]=0;}int main()
{cin>>row>>col;vector<vector<int>> nums(row,vector<int>(col));for(int i=0;i<row;i++){for(int j=0;j<col;j++){cin>>nums[i][j];}}FindMinPath(nums,0,0);for(int i=0;i<MinPath.size();i++){cout<<"("<<MinPath[i][0]<<","<<MinPath[i][1]<<")"<<endl;}return 0;
}
你学会了吗???
查看全文
99%的人还看了
相似问题
- 头发的方向图(2D和3D)与合成
- 第六届浙江省大学生网络与信息安全竞赛 2023年 初赛/决赛 WEB方向 Writeup
- LitCTF2023 - Reverse方向 全WP
- 大语言模型(LLM)综述(七):大语言模型设计应用与未来方向
- 每日汇评:黄金正在期待鲍威尔的讲话以获取新的方向动力
- anker创新-2023年秋季校园招聘-音频算法方向
- JTS: 16 Orientation 方向
- 「随笔」IT行业哪个方向比较好就业
- mpv播放器input.conf配置,解决方向键快进快退无效的问题(总是跳到关键帧)
- [SSD综述1.8] 固态存储市场发展分析与预测_固态存储技术发展方向(2022to2023)
猜你感兴趣
版权申明
本文"牛客题霸 -- HJ43 迷宫问题":http://eshow365.cn/6-27749-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!