图论入门

本文介绍了图论的基础知识,包括图的建立与存储(邻接表和邻接矩阵),图的遍历(DFS和BFS),重点讲解了拓扑排序在有向无环图(DAG)的应用,以及并查集的初始化、合并与路径压缩优化。内容覆盖了图论的基本概念和常见算法的实现细节。

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

图论入门

图的建立与存储

邻接表

vector实现邻接表

邻接表是面向的数据结构,所以需要边的内容用一个结构体*存储*

关于vector
1、创建vector对象	vector<int> vec;
2、插入	vec.insert();
3、删除	vec.erase();
4、尾部插入	vec.push_back();
5、清空	vec.clear();
vector建图
struct Edge{
   
   
    int from;//顶点序号
    int to;//顶点序号
    int w;//权值(边长)
    //重载构造函数
    Edge(int f=0,int t=0, int _w=0):from(f),to(t),w(_w){
   
   }
    //重载比较运算符
    bool operator < (const Edge &e) const{
   
   return w<e.w;}
};
vector <Edge> edge[N];//G[i]代表从i出发的边,vector里面存的是边
int n,m;
vector <int> G[N];

int main()
{
   
   
    cin>>n>>m;
    for(int i=0;i<m;i++){
   
   
        int uu,vv;
        cin>>uu>>vv;
        G[uu].push_back(vv);//建图
        //G[u][i]表示u-i的边
    }
}
链式前向星建图
const int N=100000;
struct node{
   
   
    int v;//终点
    int w;//权值
    int next;//下一条边的标号
}edge[N];

int n,m;
int cnt=0;
int head[N];
//head[ i ]中存的是以 i 为起点的最后一条边的编号,因为采用的是头插法

void add(int u,int v,int w){
   
   
    edge[cnt].v = v;
    edge[cnt].w = w;
    edge[cnt].next = head[u];
    head[u] = cnt++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值