vector二维结构的使用(1)

文章介绍了深度优先搜索算法的C++代码实现,同时提及了提供一份面向Python开发者的全套学习资料,包括零基础和进阶课程,旨在帮助自学者提升技能并减轻经济负担。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


// 深度优先搜索



#include<iostream>

#include<vector>

#include<limits.h>

using namespace std;



int N, M, C1, C2;// 城市数,路数,起始城市,结束城市

int teamNum[500];// 每个城市救援队数量

vector<int> vec[500];   // 城市i的第t个相邻城市是vec[i][t]

int dis[500][500];  //城市i到城市j的距离

int minDis[500];    // 到城市i的最短距离

int pathNum, teamn;



void dfs(int curCity, int curLen, int curTeam){

    /*深度优先搜索

        curCity:当前城市  curLen:当前最短路径  curTeam:当前救援队总数

    */



    //当前已走过的距离大于最短路径

    if(curLen > minDis[curCity]) return;    



    //当前已到达C2城市

    if(curCity == C2){

        if(curLen == minDis[curCity]){//当前走过距离和mindis相等,即多了一条最短路径

            pathNum++;

            if(curTeam > teamn) teamn = curTeam;    //若当前救援队数量更大,更新救援队数量

        }else{  

            //当前走过的距离小于最短路径,直接更新最短路径数和救援队数目

            minDis[curCity] = curLen;

            pathNum = 1;

            teamn = curTeam;    

        }



    }else{  //当前在其他城市

        // 判断是否需要更新最小距离

        if(curLen < minDis[curCity]) minDis[curCity] = curLen;

        for(int i=0; i<(int)vec[curCity].size(); i++){

            int adjoinCity = vec[curCity][i];   // curCity的相邻城市

            // 遍历curCity的相邻城市

            dfs(adjoinCity, curLen+dis[curCity][adjoinCity], curTeam+teamNum[adjoinCity]);  

        }

    }



    

}



int main(){

    int pos;

    int i, j, len;  //城市i和城市j的路长度为len

    cin >> N >> M >> C1 >> C2;

    for(int pos=0; pos<N; pos++)  cin >> teamNum[pos];

    for(int pos=0; pos<M; pos++){

        cin >> i >> j >> len;

        vec[i].emplace_back(j);

        vec[j].emplace_back(i);

        dis[i][j] = dis[j][i] = len;

    }

    for(int pos=0; pos<N; pos++)  minDis[pos] = INT_MAX;

    

    dfs(C1, 0, teamNum[C1]);



    cout << pathNum << " " << teamn;

    

    return 0;

}





1004 Counting Leaves

示例代码


#include<iostream>

#include<vector>

using namespace std;



int nodeNum, nlNodeNum;     // 总结点数,非叶子的结点数

vector<int> childs[100];    // i结点的第j个子结点id为 childs[i][j]

int leafNum[100] = {0}, maxLevel; // 第i层的叶子结点数为leafNum[i]   最大层数maxLevel



void DFS(int curId, int curLevel){

    // curId:当前遍历的结点id  curLevel:当前遍历所在的层级,最上面为0层

    int childNum = childs[curId].size();



    // 若当前层级更大,更新maxLevel

    if(curLevel > maxLevel) maxLevel = curLevel;



    if(childNum==0){

        // 当前结点没有子结点

        leafNum[curLevel]++;    //更新当前层的叶子结点数

        return;

    }else{

        // 当前结点有子结点,遍历他的子结点(下一层级)

        for(int i=0; i<childs[curId].size(); i++){

            DFS(childs[curId][i], curLevel+1);

        }

    }

}



int main(){

    int pos, i;

    cin >> nodeNum >> nlNodeNum;

    for(pos=0; pos<nlNodeNum; pos++){

        int id, childNum;

        cin >> id >> childNum;

        for(i=0; i<childNum; i++){

            int childId;

            cin >> childId;

            childs[id].emplace_back(childId); 

        }

    }

 **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/dd87961af021e8872df6c2a15bdc82a2.png)

![img](https://img-blog.csdnimg.cn/img_convert/aa96fe31ec524f14ea6e7b5445bce4b7.png)

![img](https://img-blog.csdnimg.cn/img_convert/9c53a2dddb6ec06ccc2b9f5ea0f6421a.png)

![img](https://img-blog.csdnimg.cn/img_convert/25642b167c6428003df20ffec2ef7110.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**

![](https://img-blog.csdnimg.cn/img_convert/bef0949861b4c6cd94ec11884c590284.jpeg)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值