如何实现深度优先遍历(DFS)

DFS实现步骤如下:

①访问顶点V,并标记V已经访问

②查找V的第一个邻接顶点w

③若W存在,则继续执行,否则算法结束

④若W未被访问,则使用DFS递归访问w

⑤查找V的下一个邻接节点,并记为W,转到步骤③

如何实现深度优先遍历(DFS)_第1张图片

对上图进行DFS,则访问顺序为

A B D C E

使用伪代码如下:

Vector   G[maxn]
int vis[maxn]

void  dfs(int u)
{
    vis[u]=1;  //设置为已经访问
    int d=G[u].Size()//得到顶点u的所有邻接节点,个数为d
    for(int i=0;i


附上全部代码:

#include
using namespace std;
#define VertexSize 10
int visit[VertexSize];

typedef struct
{
	int weight[VertexSize][VertexSize];
}Graph;


void Initiate_Graph(Graph *g,int n)
{
	int i,j;
	for(i=0;iweight[i][j]=0;
			else g->weight[i][j]=0x7fff;
		}
}

void InsertEdge(Graph *g,int v,int w,int weight,int n)
{
	if(v<0 || v>=n||w<0||w>=n)
	{
		cout<<"overflow!"<weight[v][w]=weight;
}


void dfs(Graph *g,int u,int n)
{
	cout<weight[u][i]>0 && g->weight[u][i]<0x7fff && !visit[i])
		{
			visit[i]=1;
			dfs(g,i,n);
		}
	}
}




void main()
{
	Graph g;
	int n,edge;
	cout<<"请输入图的顶点个数:"<>n;
	cout<<"请输入图的边个数"<>edge;
	Initiate_Graph(&g,n);
	int i,p1,p2,weight;
	cout<<"请输入顶点-顶点-权值:"<>p1>>p2>>weight;
		InsertEdge(&g,p1,p2,weight,n);
	}
	dfs(&g,0,n);
	system("pause");
}


你可能感兴趣的:(图论)