模板套取
转载:https://blog.csdn.net/qq_38682621/article/details/105629772
//深度优先搜索dfs
class Solution {
public void dfs(char[][] source,int x,int y){//遍历的对象一般为树节点,图节点,二维数组等,这里以二维数组为例
if (终止条件 || 目标节点已访问) {return;}//符合终止条件或已访问过该节点,退出
source[x][y] = '0';//对已访问的节点进行标记,可以直接在原节点上修改,也可以使用一个visited数组进行标记
......//此处为对目标节点的操作,如赋值,读取数等
dfs(source,x+1,y);//递归搜索下一次遍历节点
dfs(source,x-1,y);
......
}
public int result(char[][] source){//若需要返回结果,在一个新的类中实现
int res = 0;
......//初始化
for (int i = 0;i < source.length;i++){
for (int j = 0;j < source[0].length;j++){
if (符合dfs开始节点条件) {
res++;//对需要返回的结果进行赋值,累加等操作
dfs(source,i,j);//开始dfs
}
}
}
return res;
}
}
1、200 岛屿数量
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
if (grid.empty()) return 0;
int num=0;
int row=grid.size(),col=grid[0].size();
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++){
if(grid[i][j]=='1')
++num;
dfs(grid,i,j,row,col);
}
}
return num;
}
void dfs(vector<vector<char>> &grid,int i,int j,int row,int col){
if(i<0||j<0||i>=row||j>=col||grid[i][j]=='0') return;
grid[i][j]='0';
dfs(grid,i-1,j,row,col);
dfs(grid,i+1,j,row,col);
dfs(grid,i,j+1,row,col);
dfs(grid,i,j-1,row,col);
}
};