/*******************************************************************************
函 数 名 : 547 朋友圈
功能描述 :
输入参数 : None
输出参数 : None
返 回 值 : None
*******************************************************************************/
void dfs(int** M, int MSize, int i, int *visit) {
if (visit[i] == 1) {
return;
}
visit[i] = 1;
for (int j = 0; j < MSize; j++) {
if((M[i][j] == 1) && (visit[j] == 0)) {
dfs(M, MSize, j, visit);
}
}
}
int findCircleNum(int** M, int MSize, int* MColSize){
int count = 0;
int* visit = (int *)malloc(sizeof(int) * MSize);
memset(visit, 0, sizeof(int) * MSize);
for (int i = 0; i < MSize; i++) {
if (visit[i] == 0) {
dfs(M, MSize, i, visit);
count++;
}
}
return count;
}
/*******************************************************************************
函 数 名 : 200 岛屿
功能描述 :
输入参数 : None
输出参数 : None
返 回 值 : None
*******************************************************************************/
int dir[4][2] = { {0, 1}, {0, -1}, {1, 0}, {-1, 0}};
void dfs(char** grid, int** visited, int i, int j, int row, int col)
{
// 终止条件 1:访问边界超限
// 终止条件 2:邻居已都被访问过,或本身为0
if (i < 0 || i >= row || j < 0 || j >= col) {
return;
}
if (grid[i][j] == '0' || visited[i][j] == 1) {
return;
}
visited[i][j] = 1;
int k, x, y;
for (k = 0; k < 4; k++) {
x = i + dir[k][0];
y = j + dir[k][1];
dfs(grid, visited, x, y, row, col);
}
return;
}
int numIslands(char** grid, int gridSize, int* gridColSize)
{
int col = *gridColSize;
int **visited = (int **)malloc(sizeof(int *)* gridSize);
int i, j;
for (i = 0; i < gridSize; i++) {
visited[i] = (int *)malloc(sizeof(int) * col);
memset(visited[i], 0, sizeof(int) * col);
}
int count = 0;
for (i = 0; i < gridSize; i++) {
for (j = 0; j < col; j++) {