深度优先遍历的思路,类似于二叉树的先序遍历的递归算法的过程。原理代码说得比较清楚:
void DFS(int v)
{
node_ptr p;
visited[v] = TRUE;
Visit(v);
for(p=graph[v];p;p=p->link)
if(!(visited[p->vertex]))
DFS(p->vertex);
}完整的实现:
#include <stdio.h>
#include <malloc.h>
using namespace std;
#define MAX_VERTEX_NUM 50
#define FALSE 0
#define TRUE 1
typedef struct node* node_ptr;
typedef struct node
{
int vertex;
node *link;
}node;
node_ptr graph[MAX_VERTEX_NUM];
short int visited[MAX_VERTEX_NUM];
void ResetVisited(short int visited[],int node_num)
{
for (int i=0;i<node_num;i++)
visited[i] = FALSE;
}
void BuildGraph(node_ptr *graph,int node_num)
{
// InitGraph(graph,node_num);
int v;
for(int i=0;i<node_num;i++)
{
while(1)
{
scanf("%d",&v);
if(v == -1)
{
break;
}
else
{
/*insert to head*/
node_ptr ptr = (

本文介绍了使用邻接表数据结构进行图的深度优先遍历,其思路类似于二叉树的先序遍历,通过递归算法实现。详细原理及C语言代码示例在内容中给出。
最低0.47元/天 解锁文章
1029

被折叠的 条评论
为什么被折叠?



