算法学习 5-1.1深度优先遍历

  1. 深度和广度的概念是针对图而言的。
  2. 我们可以用邻接矩阵来存储图中每一个节点的关系。
  3. 例如一个无向图:
    算法学习 5-1.1深度优先遍历_第1张图片
    深度优先遍历代码:
#include 
int book[101], sum, n, e[101][101];

void dfs(int cur)//cur是当前所在的顶点编号
{
	int i;
	printf(" %d", cur);
	sum++;//每访问一个顶点,sum就+1
	if (sum == n) return;//所有顶点都已访问过则直接退出
	for (i = 1; i <= n; i++)//从顶点1号到n号顶点依次尝试,看哪些顶点与当前顶点cur相连
	{
		//判断当前顶点cur到顶点i是否有边相连,并且判断顶点i是否已经访问过
		if (e[cur][i] == 1 && book[i] == 0)
		{
			book[i] = 1;
			dfs(i);
		}
	}
	return;
}
int main()
{
	int i, j, m, a, b;
	scanf("%d %d", &n, &m);
	//初始化二维矩阵
	for(i=1;i<=n;i++)
		for (j = 1; j <= n; j++)
		{
			if (i == j)
				e[i][j] = 0;
			else
				e[i][j] = 99999999999;//假设99999999999为正无穷
		}
	for (i = 1; i <= m; i++)
	{
		scanf("%d %d", &a, &b);
		e[a][b] = 1;
		e[b][a] = 1;//无向图,两个之间的关系都为1
	}
	book[1] = 1;
	dfs(1);
	return 0;
}

结果:
在这里插入图片描述

你可能感兴趣的:(啊哈算法学习)