关闭

DFS 深度优先遍历

标签: 数据结构DFS图的遍历深度优先
161人阅读 评论(0) 收藏 举报
分类:

图的样子:


DFS.c

#include <stdio.h>
/**************************************
CopyRight(c) 2016-8-30 11:02:57
Author:邱于涵
图的深度优先遍历
vertex是邻接矩阵,每一行代表一个顶点,每一个元素代表与其它顶点是否有连接。
color[8]是一个染色数组 用于区分 是否已经走过这个vertex.
DFS最后一个参数是传入顶点(第几个)
每次需要遍历 完所有 这行的所有顶点(是否为1而且color[x]=0)就递归

***********************************/
//邻接矩阵
int vertex[8][8] = {
	{ 0, 1, 0, 0, 0, 0, 0, 1 },
	{ 1, 0, 1, 0, 0, 0, 0, 0 },
	{ 0, 1, 0, 1, 0, 0, 1, 0 },
	{ 0, 0, 1, 0, 1, 0, 0, 0 },
	{ 0, 0, 0, 1, 0, 0, 0, 1 },
	{ 0, 0, 0, 0, 0, 0, 1, 0 },
	{ 0, 0, 1, 0, 0, 1, 0, 1 },
	{ 1, 0, 0, 0, 1, 0, 1, 0 },
};
//染色数组
int color[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
//深度优先遍历 递归函数
void DFS(int  arr[8][8],int * color,int begin);
int main(void)
{
	//从第0个开始
	DFS(vertex, color, 0);
	printf("遍历结束\n");
	while (1);
}
//实现
void DFS(int arr[8][8], int * color, int i){
	
	//输出当前是第几个顶点
	printf("当前正在访问 结点:%d \n", i);
	//更改眼色
		*(color + i) = 1;
	
	//把这个顶点  的所有  连接点 都遍历(条件是 没有染色 有连接点,注意 j=0是为了全部遍历)
	for (int j = 0; j < 8; j++){
		if (arr[i][j]==1 && color[j]==0)
			//递归
			DFS(vertex, color, j);
		
	}
}
如果从0开始遍历,下面是遍历结果:


如果从 5遍历 ,下面是遍历结果:


原创文章,未经允许请勿转载在,本人QQ:1031893464,邱于涵

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:181108次
    • 积分:4511
    • 等级:
    • 排名:第6576名
    • 原创:276篇
    • 转载:31篇
    • 译文:0篇
    • 评论:23条
    博客专栏
    最新评论