一些常用的数据结构(四):图

 队列比栈更简单,无非就是个有队头和队尾指针,两端操作的FIFO结构罢了,不写了。。。

图的广度优先遍历算法:

1.将顶点加入队列,标记为已到达

2.将队首元素出队,找到与他相邻且未标记的元素入队。

3.循环2直到队空。

深度优先遍历算法:

对于最新发现的顶点,如果它还有以此为起点而未探测到的边,就沿此边继续汉下去。当结点v的所有边都己被探寻过,搜索将回溯到发现结点v有那条边的始结点。这一过程一直进行到已发现从源结点可达的所有结点为止。如果还存在未被发现的结点,则选择其中一个作为源结点并重复以上过程,整个进程反复进行直到所有结点都被发现为止。

 

迪杰斯特拉算法描述如下:
1)arcs[i,j]表示弧<vi,vj>上的权值。若<vi,vj>不存在,则置arcs[i,j]为∞(在本程序中为MAXCOST)。S为已找到从v出发的最短路径的终点的集合,初始状态为空集。那么,从v出发到图上其余各顶点vi可能达到的最短路径长度的初值为D[i]=arcs[Locate Vex(G,v),i] vi∈V
2)选择vj,使得D[j]=Min{D[i] | vi∈V-S}
3)修改从v出发到集合V-S上任一顶点vk可达的最短路径长度。如果D[j]+arcs[j,k]<D[k] 则修改D[k]为D[k]=D[j]+arcs[j,k]

 

你可能感兴趣的:(数据结构,算法,J#)