深度优先搜索(DFS)是一个递归过程,有回退的过程。
用邻接表存储模版:
DFS(顶点i)//从顶点i进行深度优先搜索{
visited[i]=1;//将顶点i访问标志职为1
p=顶点i的边链表表头指针;
while(p不为空)
{
//设指针p所指向的边结点所表示的边中,另一个顶点为顶点j
if(顶点j未访问过)
{
//递归搜索前的准备工作需要在这里写代码
DFS(顶点j);
//以下是DFS的回退位置,在很多应用中需要在这里写代码
}
p=p->naxtarc;//p移向下一个边结点
}
}
用邻接矩阵存储模版:
DFS(顶点i)//从顶点i进行深度优先搜索
{
visited[i]=1;//将顶点i访问标志置为1
for(j=0; j<n; j++) //对其他所有顶点j(n一般表示方向数)
{
//j是i的邻接顶点,且顶点j没有访问过
if(Edge[i][j]==1&&!visited[j])
{
//递归搜索前的准备工作需要在这里写代码
DFS(j);//从顶点j进行深度优先搜索
//以下是DFS的回退位置,在很多应用中需要在这里写代码
}
}
}
广度优先搜索(BFS)是一个分层的搜索过程,没有回退过程,是非递归的。
用链表存储模版:
BFS(顶点i)//从顶点i进行广度优先搜索{
visited[i]=1;//将顶点i访问标志置为1
//将顶点i入队列
while(队列不为空)
{
//取出队列头的顶点,设为k
p=顶点k的边链表表头指针;
{
while(p不为空)
{
//设指针p所指向的边节点所表示的边的另一个顶点为顶点j
if(顶点j未访过)
{
//将顶点j访问标志置为1
//将顶点j入队列
}
}
p=p->nextarc;//p移向下一个边结点
}
}
}
用邻接表存储模版:
BFS(顶点i)//从顶点i进行广度优先搜索
{
visited[i]=1;//将顶点i访问标志置为1
//将顶点i入队列
while(队列不为空)
{
//取出队列头的顶点,设为k
for(j=0; j<n; j++) //对其他所有顶点j
{
//j是k的邻接顶点,且顶点j没有访问过
if(Edge[k][j]==1&&!visited[j])
{
//将顶点j访问标志置为1
//将顶点j入队列
}
}
}
}