dfs(无向图)

深度优先搜索:首先从一个未走过的顶点作为起始顶点,沿着当前顶点的边到未访问过的顶点;当没有未访问过的顶点时,则返回到上一顶点,继续试探访问别的顶点,直到所有顶点都被访问过。

在这里插入图片描述代码实现:

#include "stdio.h"
int book[101],sum=0,n,e[101][101]; //e[][] 邻接矩阵   
void dfs(int cur) //cur是当前所在的顶点编号 
{
	int i;
	printf("%d ",cur);
	sum++; //访问节点计数器 
	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; //标记顶点i已经访问过
			dfs(i); //从顶点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] = 99999999; //假设为正无穷
			  
		  } 
		  
	 }
	 //读顶点之间的边 
	 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);  //从1号开始 
	  
	  getchar();getchar();
	  return 0;
	  
	  
	  
 }

效果图:
在这里插入图片描述
笔记:
1.邻接矩阵
邻接矩阵表示法:设图A=(V,E)有 n 个顶点,则
在这里插入图片描述图的邻接矩阵是一个二维数组A.arcs[n][n],定义为:

在这里插入图片描述
无向图的邻接矩阵表示法:
在这里插入图片描述
分析1:无向图的邻接矩阵是对称的
分析2:顶点 i 的度=第 i 行(列)中 1 的个数
特别:完全图的邻接矩阵中,对角元素为0,其余为1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值