leetcode练习

这篇博客通过几个例子详细介绍了如何使用深度优先搜索(DFS)算法来解决LeetCode中的经典问题,如朋友圈数量、岛屿计数和水域面积等。同时也展示了DFS在二叉树平衡性检查和最小交换次数问题上的应用。
摘要由CSDN通过智能技术生成

 

/*******************************************************************************

  函 数 名     :  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++) {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值