术语与表达

 图是一种灵活的数据结构,应用非常广泛。图中包含对数据元素的集合进行抽象而得到的顶点集、对数据元素间的关系进行抽象而得到的边集。

图的相关术语

G=(V,E),V:顶点集,E:边集。顶点的数目,边的数目

边(u, v)、弧<u, v>、弧头(终端点)v、弧尾(初始点)u、权、邻接点、顶点的度(度、入度、出度)、路径、简单路径、回路(环)、连通

有向图、无向图、稠密图、稀疏图、完全图、有向完全图、子图、网、连通图、极大连通子图、连通分量、强连通图、强连通分量、连通图的生成树、极小连通子图、有向树、有向图的生成森林

图的存储结构

图在C++中的实现

  1. 预备知识

    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());





posted @ 2013-11-27 16:02  ryan_  阅读(168)  评论(0)    收藏  举报