图Graph--寻找二度好友(BFS应用)

社交网络可以用图来表示(查阅图的概念)。
寻找二度好友,这个问题就非常适合用图的广度优先搜索BFS算法来解决,因为广度优先搜索是层层往外推进的。

  • 首先,遍历与起始顶点最近的一层顶点,也就是用户的一度好友
  • 然后再遍历与用户距离的边数为2的顶点,也就是二度好友关系
  • 只需要稍加改造一下广度优先搜索代码,用一个数组来记录每个顶点与起始顶点的距离,非常容易就可以找出二度好友关系

好友网络
例如有如上好友关系网络,打印某人的n度好友。

/*** @description: 利用图的BFS广度搜索查找二度好友* @author: michael ming* @date: 2019/6/13 0:32* @modified by: */
#include <iostream>
#include <queue>
#include <memory.h>using namespace std;
#define MaxNum 20   //最大顶点数
#define MaxValue 65535  //最大值(标记矩阵空位)
class arrGraph  //邻接矩阵图
{
public:char vertex[MaxNum];    //顶点信息int GType;              //图的类型(0无向图,1有向图)int v;                  //顶点个数int e;                  //边数量int ew[MaxNum][MaxNum]; //边的权重int visited[MaxNum];    //访问标志int distance[MaxNum];   //距离(几度好友)arrGraph(int vertexNum, int edgeNum, int gt = 0){v = vertexNum;e = edgeNum;GType = gt;clearGraph();memset(distance,0,sizeof(int)*v);}void creatGraph(){int i, j, k;//循环用计数器int weight;//权重char startV, endV;//边的起始终止点cout << "输入图中各顶点的信息:" << endl;for(i = 0; i < v; ++i){cout << "第" << i+1 << "个顶点:";cin >> vertex[i];}cout << "输入各边的起点,终点,权值:" << endl;for(k = 0; k < e; ++k){cout << "第" << k+1 << "条边:";cin >> startV >> endV >> weight;for(i = 0; startV != vertex[i]; ++i);   //查找起点for(j = 0; endV != vertex[j]; ++j);     //终点ew[i][j] = weight;                      //权值,一条边 i->jif(GType == 0)ew[j][i] = weight;  //无向图,对称位置一样的权}}void clearGraph(){int i, j;for(i = 0; i < v; ++i)for(j = 0; j < v; ++j)ew[i][j] = MaxValue;    //清空矩阵(每个值置为MaxValue)}int findPos(char ch){int i;for(i = 0; i < v && ch != vertex[i]; ++i);//找到ch的位置ireturn i;}void find_friend_bfs(char s, size_t d)//从s开始广度遍历搜索 d 度好友{memset(distance,0,sizeof(int)*v);int i, k;size_t dist = 1;//好友距离(度)for(i = 0; i < v; ++i)visited[i] = 0;//访问标志置0i = findPos(s);if(i >= v)return;visited[i] = 1;queue<char> q;q.push(s);while(!q.empty()){char w = q.front();q.pop();k = findPos(w);for(i = 0; i < v; ++i){if(ew[k][i] != MaxValue && !visited[i]){visited[i] = 1;q.push(vertex[i]);distance[i] = distance[k]+1;//每个未访问点的距离是前一个访问点距离+1}}}cout << s << "的" << d << "度好友如下:" << endl;for(i = 0; i < v; ++i)  //输出d度好友{if(distance[i] == d)cout << vertex[i] << " ";}cout << endl;}
};int main()
{arrGraph ag(10,14);    //10个顶点,14条边,默认生成无向图ag.creatGraph();//输入ABCDEFGHIJ  AB1BE1EG1AG1AC1BD1EF1GH1GJ1CD1DF1FH1DI1FJ1cout << endl;ag.find_friend_bfs('A',1);  //查找A的1度好友ag.find_friend_bfs('A',2);  //查找A的2度好友ag.find_friend_bfs('A',3);  //查找A的3度好友ag.find_friend_bfs('A',4);  //查找A的4度好友ag.find_friend_bfs('I',2);  //查找I的2度好友return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术动态 | TechKG:一个面向中文学术领域的大型知识图谱

作者&#xff1a;东北大学-知识图谱研究组 任飞亮TechKG 是一个面向中文、面向学术、多领域的大型知识图谱知识库&#xff0c;知识库由“东北大学-知识图谱研究组”开发完成。和已有知识图谱如 Freebase 或 YAGO 相比&#xff0c;TechKG 具有如下主要特点&#xff1a;1、是一个…

技术总结:图算法、开源工具及其在工业界的应用场景概述

知识图谱本质上是一种图结构&#xff0c;在图内部数据规模大且质量高、外部算力足够的情况下&#xff0c;充分利用好图算法&#xff0c;能够最大程度地发挥出其数据价值。实际上&#xff0c;图&#xff08;Graph&#xff09;是一个常见的数据结构&#xff0c;现实世界中有很多很…

SIGIR2020 | 淘宝提出结合知识图谱与大规模推荐的新框架ATBRG

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 江城编 | 夕小瑶今天分享一篇淘宝发表在 SIGIR2020 上的关于知识图谱应用于大规模推荐的论文《ATBRG: Adaptive Target-Behavior Relational Graph Network for Effective Recommendation》&#xff0c…

图Graph--农夫过河问题(BFS/DFS应用)

农夫过河问题&#xff1a; /*** description: 农夫过河问题&#xff08;羊&#xff0c;白菜&#xff0c;狼&#xff09;&#xff0c;一次最多带一个东西过河&#xff0c;* 农夫不在的情况下羊会吃白菜&#xff0c;狼会吃羊&#xff0c;如何平安过河* author…

机器学习之「二分类算法」-----银行营销案例分析

原文地址&#xff1a; <di&#xff1a;https://blog.csdn.net/weixin_44696674/article/details/88231922iv id“article_content” class“article_content clearfix” data-track-view"{“mod”:“popu_307”,“con”:",https://blog.csdn.net/weixin_44696674/…

论文浅尝 | 直译优于翻译?混合语言的知识库问答方法研究

动机作者思考&#xff0c;如果一个人懂多个语言&#xff0c;那么只要他知道某一语言的某个事实&#xff0c;就能以它作为另一语言问题的答案&#xff0c;同时希望证明计算机是否也能做到这一点&#xff0c;并完成混合语言的简单问题知识问答任务&#xff08;Code-Mix Simple Qu…

2018最新Java面试78题:数据结构+网络+NoSQL+分布式架构

算法和数据结构 数组、链表、二叉树、队列、栈的各种操作&#xff08;性能&#xff0c;场景&#xff09; 二分查找和各种变种的二分查找 各类排序算法以及复杂度分析&#xff08;快排、归并、堆&#xff09; 各类算法题&#xff08;手写&#xff09; 理解并可以分析时间和空…

工程实践:基于规则模式的军事和医药领域知识图谱问答快速实现

知识结构化问答是知识图谱的一个重要的应用方向&#xff0c;虽然现在许多真实的使用体验上&#xff0c;会被评价为“鸡肋且智障”&#xff0c;并且在落地上还没有太多的付费场景&#xff0c;但也不乏有不少学生、公司、机构在尝试花时间去做这个事情。当前&#xff0c;医疗知识…

图Graph--最小生成树

文章目录1.概念2.构造最小生成树Prim算法3.构造最小生成树Kruskal算法1.概念 对图运用不同的遍历方法就可能得到图的不同遍历顺序&#xff0c;每一种遍历顺序对应于一棵生成树对于无向连通图&#xff0c;所有的生成树中必有一棵树的所有边的权的总和最小的&#xff0c;称之为最…

Longformer:超越RoBERTa,为长文档而生的预训练模型

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | ChrisCao, 小轶前言今天要与大家分享的是AllenAI今年发表的最新工作&#xff0c;Longformer——一种可高效处理长文本的升级版Transformer。作者团队提供了开源代码&#xff0c;大家可快速复现&#xff…

工程实践:基于规则句法的事件关系与主谓宾三元组抽取项目实现

目前&#xff0c;知识图谱在学术界如火如荼地进行&#xff0c;但受限于知识图谱各个环节中的性能问题&#xff0c;还尚未能够在工业界大规模运用。而与知识图谱中以实体为知识节点&#xff0c;实体关系为实体关系边对知识进行组织不同&#xff0c;以事件作为节点&#xff0c;事…

论文浅尝 | LightRNN:存储和计算高效的 RNN

链接&#xff1a;https://arxiv.org/pdf/1610.09893.pdf动机在NLP任务中使用RNN已经被证明是很有用的模型方法。但是传统的RNN在NLP中的应用有一个很大的限制&#xff1a;RNN的输出输入Embedding占用的空间太大&#xff0c;比如1024维10M词表大小的Embedding矩阵就要占掉40GB&a…

阿里最全Java面试100题汇总:涵盖天猫、蚂蚁金服等面试题!含答案~

【阿里天猫、蚂蚁、钉钉面试题目】 1、微信红包怎么实现。 2、海量数据分析。 3、测试职位问的线程安全和非线程安全。 4、HTTP2.0、thrift。 5、面试电话沟通可能先让自我介绍。 6、分布式事务一致性。 7、nio的底层实现。 8、jvm基础是必问的&#xff0c;jvm GC原理&a…

ACL2020 奇葩论文标题大赏

星标/置顶小屋&#xff0c;带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 灵魂写手rumor酱编 | 不拖更的夕小瑶又是一年一度的ACL&#xff0c;之前通过卖萌屋Arxiv服务已经零零碎碎看了一些&#xff0c;还是准备刷一下论文list&#xff0c;看看哪篇能让我的模型效果一飞冲天。…

字符串匹配算法(BF RK)

文章目录1. BF&#xff08;Brute Force&#xff09;暴力匹配BF代码2. RK&#xff08;Rabin-Karp&#xff09;算法RK代码3. 思考题&#xff1a;&#xff08;二维匹配&#xff09;1. BF&#xff08;Brute Force&#xff09;暴力匹配 BF算法的思想&#xff0c;在主串中&#xff0…

用Python寻找最优投资组合

原文地址&#xff1a;https://www.jianshu.com/p/2a25dfd465e9 现代投资组合理论&#xff08;Modern Portfolio Theory&#xff0c;MPT&#xff09;告诉我们投资者应该分散投资来实现最小化风险最大化投资回报。大邓刚开始学习这方面知识&#xff0c;用了将近一天的时候才搞懂M…

技术动态 | 事理图谱,下一代知识图谱

本文转载自公众号&#xff1a;DataHorizon。 人工智能与认知智能当前人工智能时代下&#xff0c;机器与人类之间的博弈一直在进行着。如图1所示&#xff0c;从1926年达特茅斯会议的召开标志人工智能诞生到深度学习模型在…

头条Java后台3面(含答案):事务+List集合+慢查询SQL+Redis+秒杀设计

头条Java一面 1.讲讲jvm运行时数据库区 2.讲讲你知道的垃圾回收算法 3.jvm内存模型jmm 4.内存泄漏与内存溢出的区别 5. select、epoll 的区别&#xff1f;底层的数据结构是什么&#xff1f; 6.mysql数据库默认存储引擎&#xff0c;有什么优点 7.优化数据库的方法&#xf…

CNN卷积神经网络(吴恩达《卷积神经网络》笔记一)

CNN 卷积网络说明卷积 Convolution填充 Padding步长 StrideRGB图像卷积池化 Pooling完整CNN为什么人们喜欢用卷积神经网络&#xff1f;实例分析说明 关于CNN的基础知识&#xff1a;卷积、填充、步长、池化、完整的深度CNN网络可以参考 链接: AI学习笔记——卷积神经网络&#…

字符串匹配算法(BM)

文章目录1. BM&#xff08;Boyer-Moore&#xff09;算法1.1 坏字符规则1.2 好后缀规则1.3 两种规则如何选择2. BM算法代码实现2.1 坏字符2.2 好后缀2.3 完整代码2.4 调试3. 总结1. BM&#xff08;Boyer-Moore&#xff09;算法 思想&#xff1a;有模式串中不存在的字符&#xf…