PS: This is a note.
图论基础
图的概念
偷懒一波~ 😄
补充:
- 节点的度: 无向图中与节点相连的边的数目,称为节点的度
- 节点的入度: 在有向图中,以这个节点为终点的有向边的数目
- 节点的出度: 在有向图中,以这个节点为起点的有向边的数目
邻接表
邻接表编码
- 利用结构体+指针来实现(原始,不推荐)
- 利用STL库vector+结构体来实现
实现步骤
- 结构体
- 创建图
- 顶点和边数,顶点需要用一维数组保存
- 获取顶点的下标,因为链接结点中的index域是顶点的下标值。
- 创建结点,通过头插法(或尾插法)把结点链接到头结点的尾部
- 打印
详细可见: TMusketeer的博客
邻接表代码示例
#include<bits/stdc++.h>
using namespace std;
int n,m,j,k,w;
struct node{
int to;
int w;
};
vector<node> v[100001];
int main(){
node e;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d%d",&j,&k,&w);
e.to=k;
e.w=w;
v[j].push_back(e);
e.to=j;
v[k].push_back(e);
}
for(int i=1;i<=n;i++)
{
for(vector<node>::iterator l=v[i].begin();k!=v[i].end();k++){
node t=*k;
printf("%d %d %d\n",i,t.to,t.w);
}
}
return 0;
}
更详细可见OI-Wiki