华为笔试题2
时间:2019-08-31
本文章向大家介绍华为笔试题2,主要包括华为笔试题2使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
求某个人的n度好友:
对于一个小集体(一组数据),a是b的好友,友好度为x; b是c的好友,友好度为y;且a和c不是好友,那么称c为a的2度好友,友好度为x+y; b为a的1度好友,友好度为x;
现在输入数据:
第1行:T,代表总共有n组数据,如下面为2;
第2~3行:分别输入第1组数据的不同参数,
第2行:m , i , n;
m=10代表这组有10个人,则每个人的编号为0~9;
i=5 代表求编号为5的人的好友关系;
n=2 代表求5号的2度好友,没有输出-1;如果有的话,则按照友好度降序排列,如果友好度相同,则按照人的编号升序排列;
第3行:第一个数字k=13表示第1组总共有13个朋友关系,0 3 5代表0号和3号的友谊度为5,依次类推;
按顺序输出:第i号的n度好友,如果T等于2那么应该输出两组关系;
2 10 5 2 13 0 3 5 ...省略后面
C++代码:
#include<iostream> #include<vector> #include<string> #include<queue> #include<algorithm> using namespace std; bool cmp(vector<int> a,vector<int> b){ return a[1]>b[1]; } int main(){ int T; cin>>T; for(int id=0;id<T;id++){ int m,i,n; cin>>m>>i>>n; int k; cin>>k; //朋友圈图初始化 vector<vector<int> > g(m,vector<int>(m,0)); for(int x=0;x<k;x++){ int a,b,w; cin>>a>>b>>w; g[a][b]=g[b][a]=w; } vector<int> visit(m,0); queue<int> q; //初始化1度好友 for(int x=0;x<m;x++){ if(g[i][x]!=0){ q.push(x); visit[x]=g[i][x]; } } //广度优先搜索 //第一层,找n度好友 for(int x=1;x<n;x++){ int len=q.size(); //第二层,把当前度的好友找完,共y个好友; for(int y=0;y<len;y++){ int a=q.front(); q.pop(); //第三层,对当前第x度寻找所有下一个度的好友 for(int z=0;z<m;z++){ if(z!=i && g[a][z]!=0 && visit[z]==0){ q.push(z); visit[z]=visit[a]+g[a][z]; } if(visit[z]!=0 && visit[z]<visit[a]+g[a][z]) visit[z]=visit[a]+g[a][z]; } } } vector<int> ndf; if(q.size()==0){ cout<<-1<<endl;continue; }else{ while(!q.empty()){ ndf.push_back(q.front()); q.pop(); } } int max_x=ndf.size(); vector<vector<int> > res; sort(ndf.begin(),ndf.end()); for(int x=0;x<max_x;x++){ vector<int> cell; cell.push_back(ndf[x]); cell.push_back(visit[ndf[x]]); res.push_back(cell); } sort(res.begin(),res.end(),cmp); for(int x=0;x<max_x;x++){ cout<<res[x][0]<<" "; } cout<<endl; } return 0; } /* 2 10 5 2 13 0 3 5 0 4 9 0 6 8 0 7 5 1 2 6 1 6 3 2 9 7 3 4 3 3 5 3 3 8 3 3 9 3 5 8 9 7 8 9 10 0 2 13 0 3 5 0 4 9 0 6 8 0 7 5 1 2 6 1 6 3 2 9 7 3 4 3 3 5 3 3 8 3 3 9 3 5 8 9 7 8 9 */
原文地址:https://www.cnblogs.com/joelwang/p/11440510.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用R语言随机波动模型SV处理时间序列中的随机波动率
- 20个ES6面试高频问题
- i++和++i傻傻分不清楚?这里给你最清楚的解答
- android APT 使用
- Flutter异步编程async与await的基本使用
- 教大家一个万能PPT图片排版技巧,太赞了!
- 重复读取 HttpServletRequest 中 InputStream 的方法
- 测试面试题集锦(三)| 计算机网络和数据库篇(附答案)
- 关于Scikit-Learn你(也许)不知道的10件事
- 技术天地 | CSS-in-JS:一个充满争议的技术方案
- 安全研究 | 通过域名劫持实现Azure DevOps账户劫持
- 一款针对DLL劫持的恶意DLL生成器
- AuthMatrix:一款针对Web应用和服务的认证安全检测BurpSuite工具
- KITT-Lite:基于Python实现的轻量级命令行渗透测试工具集
- 一次KimSuky攻击事件分析