05-图3. 六度空间 (30) floyd bfs
来源:互联网 发布:淘宝网休闲鞋女 编辑:程序博客网 时间:2024/06/04 08:07
05-图3. 六度空间 (30) 题目地址
floyd 最后一个case 超时 (想想也应该是超时的)
/*05-图3. 六度空间 (30)http://www.patest.cn/contests/mooc-ds/05-%E5%9B%BE3floyd() 算所有两点之间的距离 运行超时*/#include <iostream> #define N 10001#define INF 9999999int mp[N][N];int num[N];int n, m;void floyd(){ int i, j, k; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { for (k = 1; k <= n; k++) { if (mp[i][k] + mp[k][j] < mp[i][j]) { mp[i][j] = mp[i][k] + mp[k][j]; } } if (mp[i][j] <= 6) { num[i] ++; } } } /*for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { if (mp[i][j] <= 6) } }*/}int main(){ //freopen("in", "r", stdin); while (scanf("%d%d", &n, &m) != EOF) { int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { mp[i][j] = INF; } mp[i][i] = 0; num[i] = 0; } int u, v; for (i = 0; i < m; i++) { scanf("%d%d", &u, &v); mp[u][v] = 1; mp[v][u] = 1; } floyd(); for (i = 1; i <= n; i++) { printf("%d: ", i); double sum = num[i] * 1.0 / n; printf("%.2f%%\n", sum*100); } //printf("\n"); } return 0;}
采用bfs 层次遍历可以 ac
/*05-图3. 六度空间 (30)http://www.patest.cn/contests/mooc-ds/05-%E5%9B%BE3bfs()层次遍历 利用queue 和 lastVal 变量来标记每一层直接ac*/#include <iostream> #include <queue>using namespace std;#define N 10001int n, m;vector<int> mp[N]; // mp[i] i 可到达的点的vector<> 遍历vector 就可以取得相应的点bool visit[N];int bfs(int sta){ int i, j, k; for (i = 1; i <= n; i++) { visit[i] = false; // visit 初始化 } queue<int> que; que.push(sta); visit[sta] = true; int lastVal = sta; int num = 0; int count = 0; while (num <= 6 && !que.empty()) { vector<int> v; // 用来得到当前层数的所有元素 v.clear(); int tmp = que.front(); while (tmp != lastVal) { v.push_back(tmp); que.pop(); if (que.empty()) { break; } else{ tmp = que.front(); } } if (tmp == lastVal) { v.push_back(tmp); que.pop(); } int len = v.size(); // 当前层数的元素个数 if (len <= 0) // 若为0 说明 已经不需要查找下去 直接退出 { break; } count += len; // 记录数加上1 num++; // 层数加上 1 for (i = 0; i < len; i++) { int nowVal = v[i]; int nowValLinkLen = mp[nowVal].size(); for (j = 0; j < nowValLinkLen; j++) { if (!visit[mp[nowVal][j]]) { que.push(mp[nowVal][j]); lastVal = mp[nowVal][j]; visit[mp[nowVal][j]] = true; } } } } return count;}int main(){ //freopen("in", "r", stdin); while (scanf("%d%d", &n, &m) != EOF) { int i, j; for (i = 1; i <= n; i++) { mp[i].clear(); } int u, v; for (i = 0; i < m; i++) { scanf("%d%d", &u, &v); mp[u].push_back(v); mp[v].push_back(u); } for (i = 1; i <= n; i++) { printf("%d: ", i); double sum = bfs(i) * 1.0 / n; printf("%.2f%%\n", sum*100); } //printf("\n"); } return 0;}
1 0
- 05-图3. 六度空间 (30) floyd bfs
- 05-图3. 六度空间 (30)
- 05-图3. 六度空间 (30)
- 05-图3. 六度空间 (30)
- 05-图3. 六度空间 (30)
- 05-图3. 六度空间 (30)
- 六度空间-用图进行BFS遍历
- 数据结构练习题 06-图3 六度空间 BFS
- 5-7 六度空间 (bfs)
- 05-3. 六度空间 (30)
- 05-3. 六度空间 (30)
- 06-图3. 六度空间 (30)
- PAT 数据结构 05-图3. 六度空间 (30)
- PAT:05-图3. 六度空间 (Java实现)
- 中国大学MOOC-陈越、何钦铭-数据结构:06-图3 六度空间(链式前向星、BFS)
- hdu1869 六度分离 (floyd)
- HDU1869 六度分离 【Floyd】
- 1869 六度分离【floyd】
- java微信开发发送消息
- 王家林亲授《DT大数据梦工厂》第84讲:Scala中List和ListBuffer设计实现思考
- HDU 5375 Gray code
- iOS 多线程使用
- 复盘:一个创业项目的失败之路
- 05-图3. 六度空间 (30) floyd bfs
- Elasticsearch集群环境的搭建步骤
- python学习笔记3
- iOS __weak与__block修饰符到底有什么区别
- Java基础-多线程
- 32位和64位系统区别及常用数据类型所占字节数
- Unity3D音效问题
- hdu 5372 Segment Game 2015多校联合训练赛#7 树状数组
- HDU 5379 Mahjong tree