您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)

2016-04-10 23:37 411 查看
数据结构之图

图(Graph)

包含
  一组顶点:通常用V (Vertex) 表示顶点集合
  一组边:通常用E (Edge) 表示边的集合
    边是顶点对:(v, w) ∈E ,其中v, w ∈ V
    有向边<v, w> 表示从v指向w的边(单行线)
    不考虑重边和自回路

无向图:边是无向边(v, w)

有向图:边是有向边<v, w>

连通:如果从V到W存在一条(无向)路径,则称V和W是连通的

连通图(Connected Graph):如果对于图的任一两个顶点v、w∈V,v和w都是连通的,则称该图为连通图。图中任意两顶点均连通。

连通分量(Connected Component):无向图中的极大连通子图。

  极大顶点数:再加1个顶点就不连通了
  极大边数:包含子图中所有顶点相连的所有边

强连通:有向图中顶点V和W之间存在双向路径,则称V和W是强连通的。
强连通图:有向图中任意两顶点均强连通。
强连通分量:有向图的极大强连通子图。

路径:V到W的路径是一系列顶点{V, v1, v2, …,vn, W}的集合,其中任一对相邻的顶点间都有图中的边。路径的长度是路径中的边数(如果带权,则是所有边的权重和)。

   如果V到W之间的所有顶点都不同,则称简单路径
回路:起点等于终点的路径

  

一.邻接矩阵

图的邻接矩阵存储方式就是用一个二维数组来表示。

邻接矩阵G

——N个顶点从0到N-1编号

顶点i、j有边,则G[i][j] = 1 或边的权重

  

/* 邻接矩阵存储 - 多源最短路算法 */

bool Floyd( MGraph Graph, WeightType D[][MaxVertexNum], Vertex path[][MaxVertexNum] )
{
Vertex i, j, k;

/* 初始化 */
for ( i=0; i<Graph->Nv; i++ )
for( j=0; j<Graph->Nv; j++ ) {
D[i][j] = Graph->G[i][j];
path[i][j] = -1;
}

for( k=0; k<Graph->Nv; k++ )
for( i=0; i<Graph->Nv; i++ )
for( j=0; j<Graph->Nv; j++ )
if( D[i][k] + D[k][j] < D[i][j] ) {
D[i][j] = D[i][k] + D[k][j];
if ( i==j && D[i][j]<0 ) /* 若发现负值圈 */
return false; /* 不能正确解决,返回错误标记 */
path[i][j] = k;
}
return true; /* 算法执行完毕,返回正确标记 */
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: