图论入门
图的建立与存储
邻接表
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++