博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018腾讯校招编程题——最重要的城市
阅读量:2380 次
发布时间:2019-05-10

本文共 1209 字,大约阅读时间需要 4 分钟。

这里写图片描述

这里写图片描述

代码:

#include 
#include
#include
using namespace std;int dfs(vector
>& cities, int k, vector
& temp){ int count = 0; stack
stack; vector
visited(cities.size(), false); stack.push(k); while (!stack.empty()) { int curNode = stack.top(); if (visited[curNode]) { stack.pop(); } else { visited[curNode] = true; for (int i = 0; i < cities[curNode].size(); i++) { int v = cities[curNode][i]; if (!visited[v]) stack.push(v); } } } for (int i = 1; i< cities.size(); i++) { if (visited[i]) { temp[i] = temp[i] + 1;//如果城市k能访问到城市i,则城市i的进入路线城市加1 ++count;//记录能进入城市i的所有城市总和 } } return count;}int main(){ int vertexNum = 0; int edgesNum = 0; cin >> vertexNum >> edgesNum; vector
> cities(vertexNum + 1, vector
()); for (int i = 0; i < edgesNum; i++) { int u, v; cin >> u >> v; cities[u].push_back(v); } vector
s_in(vertexNum + 1, 0);//记录能进入每个城市的总数量 vector
s_out(vertexNum + 1, 0);//记录每个城市到达其他城市的总数量 for (int i = 1; i <= vertexNum; i++) { s_out[i] = dfs(cities, i, s_in); } int importCityNum = 0; for (int i = 1; i <= vertexNum; i++) { if (s_in[i] > s_out[i]) importCityNum++; } cout << importCityNum << endl;}
你可能感兴趣的文章
svn创建分支的做法
查看>>
“当前不会命中断点。源代码与原始版本不同”的问题的有效解决办法
查看>>
对面向对象和面向过程的一些新理解
查看>>
软件开发中的资源管理
查看>>
有关博客的一些断想
查看>>
Windows Server2008上安装VS2008出错及解决办法
查看>>
打开word2010每次都要配置进度的解决办法
查看>>
略论并行处理系统的日志设计
查看>>
开发人员应具备的产品设计意识
查看>>
MSComDlg.CommonDialog服务器不能创建对象错误的解决
查看>>
ArcGIS二次开发之读取遥感图像像素值的做法
查看>>
netcdf源码在windows上的编译
查看>>
慎用VC 6.0
查看>>
游戏杆编程心得
查看>>
周例会的作用
查看>>
字符集研究之多字节字符集和unicode字符集
查看>>
字符集研究之不同字符集的转换方式
查看>>
一个应用程序无法启动错误的解决过程
查看>>
除虫记——有关WindowsAPI文件查找函数的一次压力测试
查看>>
Incredibuild导入key的方式
查看>>