千里码:热点营销-1
来源:互联网 发布:天津大学软件工程学院 编辑:程序博客网 时间:2024/05/18 14:12
这是千里码的一个热点营销的题,记一下自己的解题思路
题目如下
现在的问题来了,这是100个微信用户的关系列表。为了方便表达,把名字变成一个整数,这100个用户的名字分别为1-100。每行有两个名字,代表这两人互为微信好友。
你需要使一个广告让这100个微信用户都看到,请问初始至少将这条广告传播给几个人?假设这条广告编写得很精美,因此用户们看到一定会转发在他的朋友圈让他的朋友看到的。
首先想到的是用图论的知识解题,在一个连通图中,广告只需要传播给一个人就可以让该图中的所有用户看到,所以题目转化为求好友关系图的连通分支的个数。
微信用户的好友关系可以用图表示,可以把图存在一个邻接矩阵中,下面的代码读取文件初始化邻接矩阵int graph[100][100]
public static void graphInitialize(){ try{ FileReader fr = new FileReader("E:/dev/java/javaweb/qlcoder/144341511030664.txt"); BufferedReader br = new BufferedReader(fr); String in = null; while((in = br.readLine()) != null){ String[] fragment = in.split(" "); int one = Integer.valueOf(fragment[0]) - 1; int two = Integer.valueOf(fragment[1]) - 1; graph[one][two] = graph[two][one] = 1; } br.close(); }catch(IOException e){ e.printStackTrace(); } }
下面是求图的连通分支的个数,用的是遍历的方法,从任意一点开始DFS,一次DFS完成时则搜索完了一个连通分支;然后任选一个未访问节点开始下一次DFS,并且连通分支个数count
增1;直至所有节点都被访问,则求解结束。
public static void main(String[] args){ graphInitialize(); //put all users into unvisited set for (int i = 0; i < 100; i++){ unvisited.add(i); } //the amount of connected components int count = 0; //DFS all users while(!unvisited.isEmpty()){ count++; dfs(unvisited.get(0)); } System.out.println(count); } public static void dfs(int s){ //put s into the visited set visited.add(s); unvisited.remove(new Integer(s)); for(int j = 0; j < 100; j++){ if(graph[s][j] == 1 && !visited.contains(j)){ dfs(j); } } }
这是热点营销的第一题,数据量较小,上面的程序跑着没问题
但是第二题用户量增加到100000,用数组存用户关系图会内存溢出,似乎该想想其他办法
0 0
- 千里码:热点营销-1
- 千里码:热点营销-2
- 热点营销-1
- 小李拿奥斯卡奖之热点营销
- 怎样利用热点事件实现营销目的
- 商户营销手段之免费WiFi热点
- 软文营销必将是又一热点营销法子
- 抓住自身热点事件,做足焦点营销
- 【呆子谈营销】:说说那些热点事情之后的借势营销
- 营销1
- 热点
- 网络选秀将是2008年奥运营销之后的热点
- 中科呐喊WiFi热点广告机,WiFi营销及创意展示神器
- 营销
- 营销
- deepin15.1 开启wifi热点
- 关于win8.1开热点
- 营销营销营销营销营销
- 将app做成不可打开、无桌面图标、只可被调用的插件
- list的一些使用
- Python操作Excel--xlrd
- nohup不输出日志信息的方法及linux重定向学习
- 使用log4j配置不同文件输出不同内容
- 千里码:热点营销-1
- 调试项目出错------360云盘同步搞的鬼
- arcgis for android之加载移动地图包
- 打印九九乘法表
- MATLAB一些简单的图像处理程序
- Math.ceil(a/b)结果出错--原因是a和b不是double
- resin4的初次配置与使用
- Shader学习笔记(五)纹理映射与viewDir
- oracle表数据类型number对应java中BIgDecimal转int