图的遍历一般分为深度优先遍历和广度优先遍历。
深度优先遍历:
void dfs(MGraph G, int i)
{
for (j=0;j<G->numVertexes;j++)
{
if (G.arc[i][j]!=INFINITY && !visted[j]) //如果(i,j)之间有路的话,且结点未被访问
{
visted[j]=true;
dfs(G,j);
}
}
}
void DFSTraverse(MGraph G)
{
for (i=0;i<G->numVertexes;i++)
{
if (!visted[i])
{
dfs(G,i);
}
}
}
广度优先遍历(类似于二叉树层序遍历):
void BFSTraverse(MGraph G)
{
for (i=0;i<G.numVertexes;i++)
if (!visted[i])
{
visited[i]=true;
q.push(vexs[i]);
while(!q.empty())
{
int tem=q.pop(); //q是队列
cout<<tem;
for (j=0;j<G.numVertexes;j++)
if (G.arc[tem][j]!=INFIINTY && !visited[j]) //如果未被访问过并且存在路(即可以到达的点,就压入队列)
{
push(vexs[j]);
vistied[j]=true;
}
}
}
}