【1150】Travelling Salesman Problem (25分)【图论】

举报
野猪佩奇996 发表于 2022/01/23 23:32:04 2022/01/23
【摘要】 #include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<algorithm> #include<map>#inclu...

  
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5. #include<string.h>
  6. #include<algorithm>
  7. #include<map>
  8. #include<vector>
  9. #include<queue>
  10. #include<string>
  11. #include<set>
  12. using namespace std;
  13. //注意输出最后一句的空格格式
  14. int e[300][300],n,m,k,ans=99999999,ansid;
  15. vector<int>v;
  16. void check(int index){
  17. int sum=0,cnt,flag=1;
  18. scanf("%d",&cnt);//这条路径走的城市数cnt
  19. set<int>s;
  20. vector<int>v(cnt);
  21. for(int i=0;i<cnt;i++){
  22. scanf("%d",&v[i]);//存入查询的一条路径
  23. s.insert(v[i]);
  24. }
  25. for(int i=0;i<cnt-1;i++){
  26. if(e[v[i]][v[i+1]]==0) flag=0;
  27. //有相邻两点不可达则标记
  28. sum+=e[v[i]][v[i+1]];
  29. }
  30. if(flag==0)
  31. printf("Path %d: NA (Not a TS cycle)\n",index);
  32. else if(v[0]!=v[cnt-1]||s.size()!=n)//点不够或首尾点不同
  33. printf("Path %d: %d (Not a TS cycle)\n",index,sum);
  34. else if(cnt!=n+1){//注意回到原点(初末点记2次)
  35. printf("Path %d: %d (TS cycle)\n",index,sum);
  36. if(sum<ans){
  37. ans=sum;//更新成功解min
  38. ansid=index;
  39. }
  40. }else{//剩下是最难搞的“简单圆”
  41. printf("Path %d: %d (TS simple cycle)\n",index,sum);
  42. if(sum<ans){
  43. ans=sum;//更新成功解min
  44. ansid=index;
  45. }
  46. }
  47. }
  48. int main(){
  49. scanf("%d%d",&n,&m);//n个城市,m条边
  50. for(int i=0;i<m;i++){
  51. int t1,t2,t;
  52. scanf("%d%d%d",&t1,&t2,&t);//t1到t2距离为t
  53. e[t1][t2]=e[t2][t1]=t;
  54. }
  55. scanf("%d",&k);//查询k次
  56. for(int i=1;i<=k;i++) check(i);
  57. printf("Shortest Dist(%d) = %d\n",ansid,ans);
  58. system("pause");
  59. return 0;
  60. }

 

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/104034828

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。