求矩阵中的相邻数

给定一个矩阵,给定一个矩阵中的位置,求矩阵中和此元素相邻且相等的元素数目,所谓相邻是指元素在矩阵中上下左右的四个元素,而且此相邻性是可以传递的,即相邻的相邻也是相邻元素

 解决此题的主要思想是递归回溯。在给定位置中向四个方向拓展,记录相等的元素数目,防止重复访问还要对符合要求的元素标记。然后在此元素的四个相邻位置递归此操作。

代码如下:

#include<iostream>

#include<vector>

using namespace std;

int adjacentNumbers(const vector<vector<int>>& matrix,int row,int col,int target,vector<vector<int>>& flag)
{
    if(row>=0&&row<matrix.size()&&col>=0&&col<matrix[0].size()    //it is valid and unused
       &&!flag[row][col]&&matrix[row][col]==target){
           flag[row][col]=1;
          int n1=adjacentNumbers(matrix,row-1,col,target,flag);     //Recursive
          int n2=adjacentNumbers(matrix,row+1,col,target,flag);
          int n3=adjacentNumbers(matrix,row,col-1,target,flag);
          int n4=adjacentNumbers(matrix,row,col+1,target,flag);
          return n1+n2+n3+n4+1;
       }
    return 0;
}

int main()
{
    vector<vector<int> > matrix={{1,1,5,5,1},
                                 {5,5,5,1,1},
                                 {1,1,5,5,1},
                                 {1,1,5,1,1},
                                 {5,1,1,1,5}};
     int row=1,col=0;
     int target=matrix[row][col];
     vector<int> temp(matrix[0].size(),0);
     vector<vector<int>> flag(matrix.size(),temp);
     cout<<adjacentNumbers(matrix,row,col,target,flag)-1<<endl;  //the result from adjacentNumbers includs itself
     return 0;
}

猜你喜欢

转载自blog.csdn.net/Jeff_Winger/article/details/81389896