PAT-1150 Travelling Salesman Problem (25分)

没有输出的错误代码1
过样例但是多处错误的代码2
以上两个后两个测试点错误是因为dist 和描述 之间忘记输出空格

前两个测试点参照浒鱼鱼代码改好了。但我始终看不出来区别在哪里

//
// Created by ZhangXiaoYu on 2020/7/16.
//
#include <iostream>
#include <vector>
#include <set>
#include <cstring>
using namespace std;
int g[210][210];

//如果set中城市数量小于n的话,直接就是not
int main(){
    int n,m,k;
    cin>>n>>m;//n是城市个数,m是边数,
    for(int i=0;i<m;i++){
        int a,b,dist;
        cin>>a>>b>>dist;
        g[a][b]=g[b][a]=dist;
    }
    cin>>k;//k是路径数
    int c;
    int ans = 9999999;
    int tag=-1;
    for(int i=1;i<=k;i++){
        set<int>s;
        vector<int >v;
        cin>>c;//路径有几个节点
        int node;
        int dis=0;
//        cin>>node;
        int error_flag=0;
//        int first_node =node;
//        v.push_back(node);
        for(int j=0;j<c;j++){
            cin>>node;
            v.push_back(node);
            s.insert(node);
            if(j!=0){
                dis+=g[v[j-1]][v[j]];
                if(g[v[j-1]][v[j]]==0)error_flag = 1;
            }

        }
        int flag =0;
        printf("Path %d: ",i);
        if(error_flag){//如果不连通
            printf("NA");

        }
        else cout<<dis; //说明连通

        if(s.size()!=n||v[0]!=v[v.size()-1] || error_flag){//城市不够或者没有回到起点
            printf(" (Not a TS cycle)\n");
            flag=1;
            continue;
        }
        else if(v.size()>n+1)printf(" (TS cycle)\n");
        else printf(" (TS simple cycle)\n");
        if(ans>dis){
            ans = dis;
            tag = i;
        }
    }
    printf("Shortest Dist(%d) = %d\n",tag,ans);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值