码迷,mamicode.com
首页 > 其他好文 > 详细

第六章——图

时间:2019-05-19 23:13:23      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:生成   邻接   值类型   col   有关   第一条   src   none   cno   

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

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

其中,邻接矩阵构造简单,方便操作,易于判断两个顶点间是否存在边,即通过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;
}
广

 

第六章——图

标签:生成   邻接   值类型   col   有关   第一条   src   none   cno   

原文地址:https://www.cnblogs.com/chenjianyuan/p/10891308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!