PAT(甲级)2021年春季考试 7-4 Recycling of Shared Bicycles
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT(甲级)2021年春季考试 7-4 Recycling of Shared Bicycles相关的知识,希望对你有一定的参考价值。
解题思路:
先用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的主要内容,如果未能解决你的问题,请参考以下文章
PAT(甲级)2019年春季考试 7-4 Structure of a Binary Tree
PAT(甲级)2021年春季考试 7-1 Arithmetic Progression of Primes