《五月集训》第二十七天——图


前言

        
刷题坚持每一天,以下题目引用自:力扣(LeetCode)

💎一、题目一

🏆1.题目描述

原题链接:1791. 找出星型图的中心节点

        有一个无向的 星型 图,由 n 个编号从 1 到 n 的节点组成。星型图有一个 中心 节点,并且恰有 n - 1 条边将中心节点与其他每个节点连接起来。
        
给你一个二维整数数组 edges ,其中 edges[i] = [ui, vi] 表示在节点 ui 和 vi 之间存在一条边。请你找出并返回 edges 所表示星型图的中心节点。

示例 1:
Alt
输入:edges = [[1,2],[2,3],[4,2]]
输出:2
解释:如上图所示,节点 2 与其他每个节点都相连,所以节点 2 是中心节点。

🏆2.解题思路

🔑思路:

​         因为是无向的只要有一个节点两次那么这个节点就是中心点。

🏆3.代码详解

int findCenter(int** edges, int edgesSize, int* edgesColSize){
    return (edges[0][0] == edges[1][0] || edges[0][0] == edges[1][1]) ? edges[0][0] : edges[0][1];
}

💎二、题目二

🏆1.题目描述

原题链接:797. 所有可能的路径

        给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)
        graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

示例 1:
Alt
输入:graph = [[1,2],[3],[3],[]]
输出:[[0,1,3],[0,2,3]]
解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3

🏆2.解题思路

🔑思路:

​         暴力深搜,找从开始到结尾的所有路径。

🏆3.代码详解

void dfs(int x, int n, int** ans, int* stack, int* stacksize, int** graph, int* graphColSize, int* returnSize, int** returnColumnSizes){
    if(x == n){
        int* tmp = malloc(sizeof(int) * (*stacksize));
        memcpy(tmp, stack, sizeof(int) * (*stacksize));
        ans[*returnSize] = tmp;
        (*returnColumnSizes)[(* returnSize)++] = (*stacksize);
    }
    for(int i = 0; i < graphColSize[x]; ++i){
        int y = graph[x][i];
        stack[(*stacksize)++] = y;
        dfs(y, n, ans, stack, stacksize, graph, graphColSize, returnSize, returnColumnSizes);
        --(*stacksize);
    }
}

int** allPathsSourceTarget(int** graph, int graphSize, int* graphColSize, int* returnSize, int** returnColumnSizes){
    * returnSize = 0;
    * returnColumnSizes = (int*)malloc(sizeof(int)*20000);
    int** ans = (int**)malloc(sizeof(int*)*20000);
    int stack[15];
    int stacksize = 0;
    stack[stacksize++] = 0;
    dfs(0, graphSize-1, ans, stack, &stacksize, graph, graphColSize, returnSize, returnColumnSizes);
    return ans;
}

💎五、星球推荐

        星球链接:英雄算法联盟

星球里有什么?
        【朋友圈】一个极致精准的自律、编程、算法的小圈子。
        【算法集训】以月为单位组织算法集训,每天四题,风雨无阻。
        【排行榜】每天、每周都会有榜单,激励大家不断进步,不断成长。
        【个人规划】每个人都写好自己的规划,也可以查看他人的规划,时刻警醒自己不掉队。
        【打卡挑战】每日一题打卡、每日早起打卡、算法集训打卡、规划完成情况打卡。
在星球里做什么?
        目前星球人数达到450+,在星球里你能够遇到一群志同道合之人,因为都是花钱进来的,你不会看到任何浑水摸鱼的人,每个人都有自己的每月规划,星主每月都会组织算法集训,每天一起刷题,你可以看到别人的解题报告,取其之长,补己之短。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值