几个简单的概念
无向图,ab两个点之间有一条边,可以从a到b,也可以从b到a,就叫做无向。
有向图,ab两个点之间有一条边,仅允许从a到b或者从b到a,就叫做有向。
带权,从a到b需要付出c的代价。
图的存储方式比较常见的2类,邻接矩阵和邻接表
1、邻接矩阵,用一个数组来记录图的情况。
int mp[111][111];
mp[a][b]=1; //有向无权
mp[a][b]=mp[b][a]=1; //无向无权
mp[a][b]=c; //有向带权
mp[a][b]=mp[b][a]=c; //无向带权
for(int i=1;i<=n;i++){
if(mp[a][i]){} //遍历a节点的边
}
2、邻接表,可以细化为借助STL实现的邻接表和前向星,本质上没有区别,只是存储结构稍有不同
比如对于一个4个节点的有向图,其中有边1-2,1-3,1-4, 2-3,2-4,3-4
邻接表存的形式是
1->2->3->4
2->3->4
3->4
前向星
1->4>3>2
2->4->3
3->4
STL邻接表
struct node{
int to; //终点
int v; //权
}rt;
vector<node>v[maxn];
void add(int a,int b,int c){ //从a