只爱洗碗 2021-11-11 13:59 采纳率: 89.5%
浏览 18
已结题

定义一个二维数组,关于这个数组,请问怎么去解决

定义一个二维数组,关于这个数组,请问怎么去解决呢,有没有人可以帮我看看怎么做

img

  • 写回答

1条回答 默认 最新

  • 从善若水 5G/6G通信领域优质创作者 2021-11-11 14:04
    关注
    
    #include<iostream>
    #include<vector>
    using namespace std;
    
    int N, M; //分别代表行和列
    vector<vector<int>> maze;//迷宫矩阵
    vector<vector<int>> path_temp;//存储当前路径,第一维表示位置
    vector<vector<int>> path_best;//存储最佳路径
    
    void MazeTrack(int i, int j)
    {
        maze[i][j] = 1;//表示当前节点已走,不可再走
        path_temp.push_back({ i, j });//将当前节点加入到路径中
    
        if (i == N - 1 && j == M - 1) //判断是否到达终点
            if (path_best.empty() || path_temp.size() < path_best.size())
                path_best = path_temp;
    
        if (i - 1 >= 0 && maze[i - 1][j] == 0)//探索向上走是否可行
            MazeTrack(i - 1, j);
        if (i + 1 < N && maze[i + 1][j] == 0)//探索向下走是否可行
            MazeTrack(i + 1, j);
        if (j - 1 >= 0 && maze[i][j - 1] == 0)//探索向左走是否可行
            MazeTrack(i, j - 1);
        if (j + 1 < M && maze[i][j + 1] == 0)//探索向右走是否可行
            MazeTrack(i, j + 1);
        maze[i][j] = 0;         //恢复现场,设为未走
        path_temp.pop_back();
    }
    int main()
    {
        while (cin >> N >> M)
        {
            maze = vector<vector<int>>(N, vector<int>(M, 0));
            path_temp.clear();
            path_best.clear();
            for (auto &i : maze)
                for (auto &j : i)
                    cin >> j;
            MazeTrack(0, 0);//回溯寻找迷宫最短通路
            for (auto i : path_best)
                cout << '(' << i[0] << ',' << i[1] << ')' << endl;//输出通路
        }
        return 0;
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月19日
  • 已采纳回答 11月11日
  • 创建了问题 11月11日

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊