存储好数据后根据条件逐一判断即可。注意一下各种输出格式。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int dis[201][201];
int N,M,K,min_num=0,Min=1000000000;
int main(){
cin>>N>>M;
fill(dis[0],dis[0]+201*201,-1);
for(int i=0;i<M;i++){
int a,b,d;
scanf("%d %d %d",&a,&b,&d);
dis[a][b]=d;
dis[b][a]=d;
}
cin>>K;
for(int i=1;i<=K;i++){
int tag[N+1]={0},ct=0,n;
bool is_NA=false,flag1=true,flag2=true;
scanf("%d",&n);
vector<int> v(n);
scanf("%d",&v[0]);
for(int j=1;j<n;j++){
scanf("%d",&v[j]);
tag[v[j]]++;
if(dis[v[j]][v[j-1]]==-1){
is_NA=true;
flag1=false;
}else{
ct+=dis[v[j]][v[j-1]];
}
}
if(v[0]!=v[n-1]){
flag1=false;
}
for(int j=1;j<=N;j++){
if(tag[j]==0){
flag1=false;
}
if(tag[j]>1){
flag2=false;
}
}
if(flag1&&ct<Min){
Min=ct;
min_num=i;
}
if(flag1){
if(flag2){
printf("Path %d: %d (TS simple cycle)\n",i,ct);
}else{
printf("Path %d: %d (TS cycle)\n",i,ct);
}
}else{
if(is_NA){
printf("Path %d: NA (Not a TS cycle)\n",i);
}else{
printf("Path %d: %d (Not a TS cycle)\n",i,ct);
}
}
}
printf("Shortest Dist(%d) = %d\n",min_num,Min);
return 0;
}