图的存储、遍历(BFS、DFS)
一、图的存储
1、邻接矩阵(二维数组)
int mp[N][N];
2、边缘列表(结构体)
tip:用的很少,适用于需要对边权排序的题目
struct Edge { int u,v; }g[N];
3、邻接表
1)vector数组(c++自带的,动态数组,没有边权或者图比较简单的时候比较好用)
vector <int> a;//动态数组a a.push_back(4); cout<0]; cout<<a.size(); a.clear();//初始化 for (auto c:a) //遍历a数组 { cout<"\n"; } vector <int>g[N]; //比如说g[1]存的是一个数组 g[i].push_back(4);
2)链式前向星(常用)
数组模拟链表,头插法
int h[N],w[N],e[N],ne[N],idx; //N是边的取值范围 void add(int a,int b,int c) { e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++; } memset(h,-1,sizeof h);