第六章——图

Posted chenjianyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章——图相关的知识,希望对你有一定的参考价值。

本章学习了有关图的概念以及基本操作。

主要学习了邻接矩阵,邻接表,深度搜索以及广度搜索。

其中,邻接矩阵构造简单,方便操作,易于判断两个顶点间是否存在边,即通过A[i][j]=0/1。但是数据量大时,会浪费大量空间,且不利于增删顶点。而领接表方便增删顶点,只需修改指针即可,而且空间利用效率更高,解决了系数矩阵的问题,但是不方便判断两顶点间是否有边的存在。

 

有关图的术语:

        1、生成树:极小连通子图,含有图中全部顶点,只有n-1条边。

        2、极小生成树:权值最小的生成树。

 

 

有关邻接矩阵和邻接表的存储:

1、邻接矩阵:

技术图片
#define MVNum 100         //最大顶点数
typedef char VerTexType;  //顶点的数据类型
typedef int ArcType;         //边的权值类型
typedef struct {
    VerTexType vexs [MVNum]; //顶点表(一维数组)
    ArcType arcs [MVNum] [MUNum];  //邻接矩阵
    int vexnum, arcnum;     //顶点数及边数
} AMGraph;
邻接矩阵

2、

技术图片
typedef struct ArcNode   //
{
    int adjvex;        //该边指向顶点的位置
    struct ArcNode *nextarc;  //下一条边的指针
    quanzhi info;  //边权值
} ArcNode;

typedef struct VNode  //顶点信息
{
   VerTexType data;
   ArcNode *fiestarc   //第一条指该定点的边的指针
}VNode, AdjList [MVNum];  

typedef struct 
{
  AdjList verices; 
  int vexnum,arcnum; //顶点数 边数
}ALGraph;
邻接表

 

广度优先遍历:

   广度优先遍历,又称为广度优先搜索,简称BFS。图的广度优先遍历就类似于树的层序遍历了。

代码如下:

技术图片
//广度优先遍历
void BFS(AGraph* G,int v) {
    ANode *p;
    queue<int> qu;
    vector<int> flag(G->n);
    int w;
    cout<<v<<" ";
    flag[v]=1;
    qu.push(v);
    while(!qu.empty()) {
        w = qu.front();
        qu.pop();
        p = G->adjlist[w]->firstarc;
        while(p) {
            if(!flag[p->adjvex]) {
                cout<<p->adjvex<<" ";
                flag[p->adjvex] = 1;
                qu.push(p->adjvex);
            }
            p = p->nextarc;
        }
    }
    cout<<endl;
}
广

 

以上是关于第六章——图的主要内容,如果未能解决你的问题,请参考以下文章

第六章 图(b1)邻接矩阵

第六章 概率图模型的新型学习方法

第六章——图

第六章学习小结

第六章学习小结

数据结构——第六章 图