矩阵行走路径问题
来源:互联网 发布:ea7视频软件 编辑:程序博客网 时间:2024/04/20 19:14
1、一个m*n的矩阵a[][],机器人从左上角走到右下角,只能朝右或朝下走,输出所有路径。
2、如果矩阵有的格子可以走,有的格子不可以走,输出所有路径。(a[i][j]==1表示可以走,a[i][j]==0表示不可以走)
思路:
利用递归算法求解问题。问题1直接用深搜的思想。问题2在问题1的基础上加个判断条件即可。
关于这类题目中求解从某一点到某一点的所有可能路径的数目可参考这里
- #include <iostream>
- #include <vector>
- using namespace std;
- struct Point
- {
- int x;
- int y;
- Point(int i, int j) : x(i), y(j)
- {}
- };
- //问题1 x y是起始点,m n是终止点 向量中坐标记录路径
- void Path1(int x, int y, int m, int n, vector<Point>& vec, int len)
- {
- if (x == m || y == n)
- return;
- Point p(x, y);
- vec[len++] = p;
- if (x == m - 1 && y == n - 1)
- {
- for (int i = 0; i < vec.size(); ++i)
- cout << vec[i].x << ' ' << vec[i].y << endl;
- }
- else
- {
- Path1(x, y+1, m, n, vec, len);
- Path1(x+1, y, m, n, vec, len);
- }
- }
- //问题2
- void Path2(int x, int y, int m, int n, vector<Point>& vec, int len, int safe[][4])
- {
- if (x == m || y == n || safe[x][y] == 0)
- return;
- Point p(x, y);
- vec[len++] = p;
- if (x == m - 1 && y == n - 1)
- {
- for (int i = 0; i < vec.size(); ++i)
- cout << vec[i].x << ' ' << vec[i].y << endl;
- }
- else
- {
- Path2(x, y+1, m, n, vec, len, safe);
- Path2(x+1, y, m, n, vec, len, safe);
- }
- }
- void main()
- {
- int m = 3, n = 4;
- int x = 0, y = 0;
- int len = 0;
- Point p(0, 0);
- vector<Point> vec(m+n-1, p);
- Path1(x, y, m, n, vec, len);
- int safe[][4] = { {1, 1, 1, 0},{0, 1, 1, 1}, {0, 0, 1, 1} };
- Path2(x, y, m, n, vec, len, safe);
- }
其实这是一个回溯问题,这里我再贴一段代码,有稍微的区别,就可以更加容易辨别这是回溯问题了。
void Path1(int x, int y, int m, int n, vector<Point>& vec, int len) { if (x == m || y == n) return; Point p(x, y); // vec[len++] = p; vec.push_back(p); if (x == m - 1 && y == n - 1) { for (int i = 0; i < vec.size(); ++i) cout << vec[i].x << ' ' << vec[i].y << endl; } Path1(x, y+1, m, n, vec, len); Path1(x+1, y, m, n, vec, len); vec.pop_back(); }
- 矩阵行走路径问题
- CI8.2--矩阵行走问题
- python -- 矩阵中的路径问题
- 机器人行走问题
- 求矩阵的最大路径的问题
- 动态规划之矩阵路径问题
- 求矩阵的最大和路径问题
- 矩阵乘法两点间路径问题
- 二维矩阵里的路径问题
- 常规算法解决矩阵内最短路径问题
- 常规算法解决矩阵内路径问题
- 求解矩阵最短路径问题
- 常见矩阵路径计算问题(iOS版本)
- 【行走】
- 行走
- 行走
- 行走
- 行走
- VS2010如何在控制台应用程序中添加对MFC库的支持
- 第七周
- IP报文中的校验和函数实现
- http状态码
- (笔记)spss的描述统计和比较均值
- 矩阵行走路径问题
- nyoj 删除元素
- CSDN上的第一篇文章
- 纯虚函数
- 2013.10.19
- linux 如何查找命令的路径
- java设计模式(一)——适配器、桥接、建造者、职责链、命令
- 如何实现GridView控件分页显示数据
- 海豚浏览器笔试题 2014 武汉