图
术语与表达
图是一种灵活的数据结构,应用非常广泛。图中包含对数据元素的集合进行抽象而得到的顶点集、对数据元素间的关系进行抽象而得到的边集。
图的相关术语
G=(V,E),V:顶点集,E:边集。顶点的数目,边的数目
边(u, v)、弧<u, v>、弧头(终端点)v、弧尾(初始点)u、权、邻接点、顶点的度(度、入度、出度)、路径、简单路径、回路(环)、连通
有向图、无向图、稠密图、稀疏图、完全图、有向完全图、子图、网、连通图、极大连通子图、连通分量、强连通图、强连通分量、连通图的生成树、极小连通子图、有向树、有向图的生成森林
图的存储结构
图在C++中的实现
- 预备知识
C++中的vector类是实现数组的不错选择。
vector<type> variable_name (number of elements);
其中,数组的元素个数是可选的,于是也可以定义一个空数组:
vector<type> variable_name;
使用vector需要包含相应的头文件:
#include <vector>
vector中用于表示位置与大小的数据类型 :
vector<type>::size_type
访问vector中的元素:
vector_name[index]
改变vector的大小:
1 vector<type> variable_name; ...... n variable_name.resize(size);
向vector末尾添加、移除元素:
vector_name.push_back(element);
vector_name.pop_back(element);
向特定位置插入元素、移除元素:
vector_variable.insert(position, element); vector_variable.remove(position, element);
使用iterator访问vector元素及相关数据类的方法:
vector<type>::iterator i: cout<<*i<<endl;
i++;
i->some_method_of_type(para);iterator可以使用标准库里提供的算法:
#include <algorithm>
sort(vector.begin(), vector.end());
reverse(vector.begin(), vector.end());
random_shuffle(vector.begin(), vector.end());
const int num = count(vector.begin(), vector.end(), element);
const int hightest = *max_element(vector.begin(), vector.end());
const int lowest = *min_element(vector.begin(), vector.end());