解题思路:

先用Floyd算法求出全员最短路径矩阵。

然后使用DFS进行遍历,遍历的原则是就近贪心,对于每一个点先遍历离他最近的未访问点。

记录访问点的个数,同时用数组存放已访问点,如果访问点的个数不等于输入点数+1(加一是因为访问点把起点也算上了而输入时没有),说明不连通。

注:以下代码仅仅通过了给出的2个测试用例。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<vector>
#include<queue>using namespace std;const int maxn = 210;
const int inf = 1000000000;//即10^9 int Adj[maxn][maxn]; int vNum,eNum;bool vis[maxn] = {0};
int visNum = 0;int totalDis = 0;
int path[maxn] = {0};void DFS(int u){vis[u] = 1;path[visNum++] = u;int MIN = inf,v = -1;for(int i=0;i<=vNum;i++){ if(Adj[u][i]<MIN&&vis[i]==false){v = i;MIN = Adj[u][i];}}if(v==-1)return;totalDis += Adj[u][v];DFS(v);
}void Floyd(){for(int k=0;k<=vNum;k++){for(int i=0;i<=vNum;i++){for(int j=0;j<=vNum;j++){if(Adj[i][k]!=inf&&Adj[k][j]!=inf&&Adj[i][j]>Adj[i][k]+Adj[k][j]){Adj[i][j] = Adj[i][k]+Adj[k][j];}}}}
}int main(){scanf("%d %d",&vNum,&eNum);for(int i=0;i<=vNum;i++){for(int j=0;j<=vNum;j++){Adj[i][j] = inf;}}for(int i=0;i<=vNum;i++){Adj[i][i] = 0;}int v1,v2,dis;for(int i=0;i<eNum;i++){scanf("%d %d %d",&v1,&v2,&dis);Adj[v1][v2] = Adj[v2][v1] = dis;dis;}Floyd();DFS(0);if(visNum!=vNum+1){for(int i=0;i<visNum;i++){printf("%d",path[i]);if(i!=visNum-1)printf(" ");}printf("\n");int pNum = vNum - visNum + 1;for(int i=1;i<=vNum;i++){if(vis[i]==false){printf("%d",i);pNum--;if(pNum!=0)printf(" ");}}}else{for(int i=0;i<visNum;i++){printf("%d",path[i]);if(i!=visNum-1)printf(" ");}printf("\n");printf("%d\n",totalDis);}
}

PAT(甲级)2021年春季考试 7-4 Recycling of Shared Bicycles相关推荐

  1. 记PAT 甲级 2021年 秋季考试 经验总结、线上考试细节、考场题解

    1.简单回顾 今天下午考完了秋季的考试,最终得了97分,第一题扣了3分,非常遗憾.还有一个多小时的时候就已经97了,回来和第一题的剩余3分周旋到最后,没能发现问题所在,不停考虑各种,我觉得可能是陷在已 ...

  2. PAT(甲级)2021年春季考试 7-1 Arithmetic Progression of Primes

    思路:用筛除法打素数表(与之相对的是枚举加逐个判断)是降低时间复杂度的第一个点,第二个点是运用上数学技巧,给定了等差数列的范围(2-MAX),给定了个数,那么最大的等差是可以求出的.循环的第一层从最大 ...

  3. PAT(甲级)2021年春季考试 7-3 Structure of Max-Heap

    考察:建堆,字符串的处理 建堆上,跳了坑,才发现自己之前的方法过于笨拙,详情见两种最大堆建堆方式 字符串处理上,走的弯路更大,但是也因此牢记了两个技巧 1. cin>>str可以用getl ...

  4. 【PAT】2021年冬季考试甲级,摸鱼游记、92分

    T1,简单模拟,20/20分 #include<bits/stdc++.h> using namespace std; const int maxn = 1e5+10; int a[max ...

  5. 【PAT】2021年春季PAT甲级题解

    文章目录 1. Arithmetic Progression of Primes (20 分) 题意 解法 暴力+剪枝 2. Lab Access Scheduling (25 分) 题意 解法 排序 ...

  6. PAT(甲级)2019春季考试(Python实现)

    7-1 Sexy Primes 7-1 Sexy Primes 分数 20 作者 陈越 单位 浙江大学Sexy primes are pairs of primes of the form (p, p ...

  7. 【PAT】2020年春季考试划水准备贴

    1.起因 因为之前NOIP凉了,所以算法竞赛没拿到任何加分加好感项,感觉白敲了三年代码 偶然间看到这个而且感觉挺简单,就试试三位一体有没有用,或者暑假实习,再不济反正把乙考了大学在水甲级和顶级凑一凑考 ...

  8. 【PAT】2020年春季考试乙级题目、答案、摸鱼、游记、93分

    T1 对称日 (15分) 7-1 对称日 (15分) 央视新闻发了一条微博,指出 2020 年有个罕见的"对称日",即 2020 年 2 月 2 日,按照 年年年年月月日日 格式组 ...

  9. PAT甲级线上考试备考

    我本人刷了两遍题库 之前考了两次都是四十几分,我认为目前甲级题库已经过时了 (对于有算法基础的同学来说) 前100题没有做的必要 除非是典型算法. DFS 和 回溯是相当重要的考点,如果有时间的话一定 ...

最新文章

  1. Golang的interface实践
  2. [20150113]关于oracle的存储结构.txt
  3. 微软解释Edge浏览器比Chrome更加安全的原因
  4. python 字典定义日志用法_python中字典(Dictionary)用法实例详解
  5. python函数 模块先加载到内存后执行_Python从内存中使用编译后的模块
  6. 【002:带参宏调试】
  7. ASP.NET中进行消息处理(MSMQ) 一 (转)
  8. Asp.Net异步加载
  9. php while次数,PHP While 循环
  10. ORACLE错误编码大全
  11. Win10专业工作站版本激活并获得数字权利的方法和密钥
  12. Docker和Jenkins构建项目总结
  13. 提升领导力这7个法则,你不得不知道
  14. Word文档中如何打外国人姓名间隔的那一个小点
  15. 相机响应曲线、ISO详解
  16. 程序员高效率工作工具推荐(必备工具)
  17. 【七夕如何根据情侣倾听的音乐进行薅羊毛】背景音乐是否会影响情侣对酒的选择
  18. 刚毕业做真实运维简历模板参考
  19. verilog报错汇总(1)
  20. lettuce MGET性能分析

热门文章

  1. CIO时代学院院长姚乐:传统行业遇上大数据 拥抱智能化未来
  2. Shell 函数、数组与正则表达式
  3. 【Treap】bzoj1588-HNOI2002营业额统计
  4. Android Touch事件传递机制 二:单纯的(伪生命周期) 这个清楚一点
  5. Win7封装无损廋身清单
  6. poj 1185(状压dp)
  7. VC++技术内幕(三)
  8. 04 pod setup 慢的问题
  9. 关于css中overflow的一些理解
  10. AssertValid函数学习