一、图的基本概念
图是有顶点集合和顶点关系集合组成的一种数据结构。
二、图的存储结构
1、邻接矩阵。应用在稠密图中。
2、邻接表。应用在稀疏图中。
3、十字链表。
三、图的遍历方式。多维度线性化的过程
1、DFS。深度优先搜索,与树的先序遍历类似
void DFS(vertex v)
{
visited[v]=true;
while(v的每个邻接点w)
{
if(!visited[w])
{
DFS(w);
}
}
}
2、BFS。广度优先搜索
void BFS(vertex v)
{
visited[v]=ture;
Enqueue(v,Q);
while(!Empty(Q))
{
v=Dequeue(Q);
while(v的每个邻接点w)
{
if(!visited[w])
{
visited[w]=ture;
Enqueue(w,Q);
}
}
}
}
例子:六度空间伪代码
void SDS()/*six depth search*/
{
int count = BFS(v);
output(count/N);
}
int BFS(vertex V)
{
visited[V]=true;
int level=0;/当前结点的层数/,int count=0;
vertex last=V/*本层的最后一个结点*/;vertex tail/*下层进队列的最后一个结点*/;
Enqueue(V,Q);
for(!Empty(Q))
{
V=Dequeue(Q);
while(V的每一个邻接点W)
{
if(!visited[W])
{
Enqueue(W,Q);
count++;
tail=W;
}
}
if(V==last)
{
last=tail;level++;
}
if(level==6) break;
}
return count;
}
无权图单源最短路径(类似广度优先搜索,注意,题中每个结点v 初始值dist[v]=-1)
void unweighted(Vertex S)
{
Enqueue(s);
while(!Isempty(Q))
{
V=Dequeue(Q);
for(V的邻结点W)
if(dist[W]=-1)
{
dist[W]=dist[V]+1;
path[W]=V;
Enqueue(W,Q);
}
}
}