给定一个矩阵,给定一个矩阵中的位置,求矩阵中和此元素相邻且相等的元素数目,所谓相邻是指元素在矩阵中上下左右的四个元素,而且此相邻性是可以传递的,即相邻的相邻也是相邻元素
解决此题的主要思想是递归回溯。在给定位置中向四个方向拓展,记录相等的元素数目,防止重复访问还要对符合要求的元素标记。然后在此元素的四个相邻位置递归此操作。
代码如下:
#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;
}