深度优先遍历的思路,类似于二叉树的先序遍历的递归算法的过程。原理代码说得比较清楚:
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)