朋友圈问题

20 篇文章 0 订阅
14 篇文章 0 订阅
该文章介绍了一个关于社交网络的问题,通过给定的二维矩阵表示学生之间的朋友关系。使用深度优先搜索(DFS)算法遍历矩阵,找出所有可能的朋友圈。当从一个未访问过的顶点开始,若能遍历到所有顶点,则这些顶点构成一个朋友圈。程序通过递归调用DFS函数来实现,并统计了朋友圈的数量。
摘要由CSDN通过智能技术生成

1.朋友圈问题

有 N 个同学,他们之间有些是朋友,有些不是,"友谊"是可以传递的,例如 A 与 B 是朋友, B 与 C 是朋友,那么 A 与 C 也是朋友,朋友圈就是完成"友谊"传递后的一组朋友。给定 N * N 的矩阵代表同学间是否是朋友,如果 M[i] [j]=1代表第 i 个学生与第 j 个学生是朋友,否则不是,求朋友圈的个数。

思路:从第一个顶点开始访问。如果能遍历完所有的顶点就代表所有顶点是一个朋友圈,如果不能遍历完,那么就从其余顶点重新开始遍历

//朋友圈问题
void DFS(int k, int num[3][3], int visited[3])
{
	visited[k] = 1;//代表当前顶点此时开始被访问
	for (int i = 0; i < 3; i++)
	{
		if (visited[i] == 0 && num[k][i] == 1)//如果i还没有被访问,且k和i是朋友
			DFS(i, num, visited);//递归调DFS
	}
}
void main()
{
	//int num[3][3] = { {1,1,0},{1,1,1},{0,1,1} };//1
	int num[3][3] = { {1,1,0},{1,1,0},{0,0,1} };//2
	int visited[3] = { 0 };//初始化为0,代表还没有被访问
	int count = 0;//记录朋友圈个数
	for (int i = 0; i < 3; i++)
	{
		if (visited[i] == 0)//还没有被访问
		{
			DFS(i, num, visited);//结束一次这个调用,就是一个朋友圈
			count++;
		}
	}
	cout << "朋友圈个数是:" << count << endl;
}

截图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在凌晨等太阳¤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值