题意:给出一张图,k条路径,判断这些路径是这个图的旅行商环路、简单旅行商环路还是非旅行商环路
#include<iostream>
#include<set>
#include<cstring>
using namespace std;
int s[203][203];
int query[203];
int n,m;
int minlen=1e7,minindex=1e7;
void checked(int c) {
int t,flag=0;
cin>>t;
set<int> num;
for(int j=0; j<t; ++j) {
cin>>query[j];
num.insert(query[j]);
}
int sum=0;
for(int i=0; i<t-1; ++i) {
sum+=s[query[i]][query[i+1]];
if(!s[query[i]][query[i+1]]) {
flag=1;
break;
}
}
if(flag==1)//query中存在两点之间不可达的情况
printf("Path %d: NA (Not a TS cycle)\n",c);
else if(query[0]!=query[t-1]||num.size()!=n)//query并没有走完所有城市或者开始和结尾城市不一样
printf("Path %d: %d (Not a TS cycle)\n",c,sum);
else {
if(minlen>sum) {
minindex=c;
minlen=sum;
}
if(t!=n+1)//query存在走重复的城市
printf("Path %d: %d (TS cycle)\n",c,sum);
else printf("Path %d: %d (TS simple cycle)\n",c,sum);
}
}
int main() {
cin>>n>>m;
memset(s,0,sizeof(s));
for(int i=0; i<m; ++i) {
int a,b,c;
cin>>a>>b>>c;
s[a][b]=c;
s[b][a]=c;
}
int k;
cin>>k;
for(int i=0; i<k; ++i)
checked(i+1);
printf("Shortest Dist(%d) = %d\n",minindex,minlen);
return 0;
}
来源:CSDN
作者:江楚郎(已婚
链接:https://blog.csdn.net/qq_40991687/article/details/104188122