C++ 在矩阵中查找从左上角到右下角的路径有问题吗?

C++ 在矩阵中查找从左上角到右下角的路径有问题吗?,c++,C++,我有一个20x30矩阵,里面填充了随机数[0,1,2]。我需要找到一条只包含1的路径,从左上角开始,到右下角结束。我需要帮助找到1的路径。还有,我如何打印我走到的每个数字的坐标?我可以显示我踩到的数字,但是我在显示其坐标时遇到问题。 这是我目前的代码 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 常数int N=3; 常数int M=3; 无效mtxFeltolt(int和mat)[N][M]; 无效mtxPrint(int和mat)[N][M]); 无效打印路径(int

我有一个
20x30
矩阵,里面填充了随机数
[0,1,2]
。我需要找到一条只包含1的路径,从左上角开始,到右下角结束。我需要帮助找到1的路径。还有,我如何打印我走到的每个数字的坐标?我可以显示我踩到的数字,但是我在显示其坐标时遇到问题。 这是我目前的代码

#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
常数int N=3;
常数int M=3;
无效mtxFeltolt(int和mat)[N][M];
无效mtxPrint(int和mat)[N][M]);
无效打印路径(int mat[M][N],向量和路径,int i,int j)
{
//如果到达最后一个单元格
如果(i==M-1&&j==N-1)
{
//打印当前路线
用于(int i:路线){

cout希望您能遵循此代码。我没有使用
std::pair
而是创建了一个简单的结构
Coord
来包含路径中坐标的行和列。这样更容易阅读。我还提供了一种生成随机数的更好方法

我使用深度优先搜索来查找路径。它不能保证最短路径,但它会找到从左上到右下的路径

#包括
#包括
#包括
#包括
结构坐标{无符号长行,col;};
模板
使用矩阵=std::vector;
使用Path=std::vector;
/**
*从[低,高]生成一个随机数
*
*@param low下限
*@param高-上限
*@返回范围内的随机数[低,高]
*/
int随机_int(int低,int高)
{
静态std::随机_设备rd;
//静态std::mt19937 mt(rd());//每次使用不同的随机数
静态std::mt19937 mt(30);//生成具有路径的矩阵的种子
标准:均匀分布区(低、高);
返回区(mt);
}
矩阵生成矩阵(常数int m,常数int n)
{
基质垫;
对于(int行=0;行无路径
如果(访问[当前行][当前列])
{
返回{};
}
访问[cur.row][cur.col]=true;
//当前位置不是1->无路径
如果(物料[当前行][当前列]!=1)
{
返回{};
}
//如果在最后,路径是平凡的
if(cur.row==end.row&&cur.col==end.col)
{
返回{cur};
}
路径p{cur};
std::向量路径;
//试着往每个方向走
//对
push_back(findPath(mat,visted,{cur.row,cur.col+1},end));
//左
push_back(findPath(mat,visted,{cur.row,cur.col-1},end));
//向上
push_back(findPath(mat,visted,{cur.row-1,cur.col},end));
//向下
push_back(findPath(mat,visted,{cur.row+1,cur.col},end));
//向右转
push_back(findPath(mat,visted,{cur.row-1,cur.col+1},end));
//右下角
push_back(findPath(mat,visted,{cur.row+1,cur.col+1},end));
//左下角
push_back(findPath(mat,visted,{cur.row+1,cur.col-1},end));
//左上角
push_back(findPath(mat,visted,{cur.row-1,cur.col-1},end));
路径最长=*std::max_元素(paths.begin()、paths.end(),
[](常数自动a,常数自动b){
返回a.size()0
&&path.back().row==mat.size()-1&&path.back().col==mat[0].size()-1)
{

Std::欢迎来到StAcdPosipe。我不确定你在这里做什么,或者为什么你使用了<代码> RCPP < /Cord>标签——你的问题与Rcpp无关,所以我现在删除了标签。如果你需要一些友好的、有良好记录的C++类,考虑矩阵可能是犰狳。祝你好运!一个观察是路由< /c。ode>是一个int的向量。如果路径存在,它将全部是1s,这不是很有用。我想你的意思是存储坐标而不是值。你可以使用
std::vector route
并存储
{I,j}
,这将是坐标。你所说的存储{I,j}是什么意思你能编辑我的代码并粘贴到那里吗?谢谢,lotA是一个包含两种类型的容器。它非常适合二维坐标。如果你将
route
声明为
std::vector
,然后执行
route。推回({i,j})
那么路径向量将保存所有坐标。对不起,我还是不懂。我对这种语言很陌生,但还是需要帮助