排序结构时出现运行时错误

时间:2018-10-28 22:53:49

标签: c++ struct

我正在尝试解决编程problem。在这里,我实现了解决此问题的kruskal算法。我正在根据 cost 变量对结构进行排序。所以我做了一个bool函数来实现这一目标。如果我写了

Runtime Error (运行时错误)

  • 返回a.cost <= b.cost

在那之后,我将该行更改为

  • 返回a.cost

我被接受了。问题出在哪里?

#include<bits/stdc++.h>
using namespace std;
#define sf scanf
#define pf printf
#define TEST int test,zz;scanf("%d",&zz);getchar();for(test=1;test<=zz;test++)
#define sci(x) scanf("%d",&x)
#define pb push_back
#define sz 55

struct node
{
    int st,en,cost;
    node() {}
    node(int _st,int _en,int _cost)
    {
        st=_st;
        en=_en;
        cost=_cost;
    }
};
bool fun(node a,node b)
{
    return a.cost<b.cost;
}
int parent[sz],lop,n;
vector<node> vec;
bool fin(int u,int v)
{
    if(parent[u]==parent[v]) return false;
    return true;
}
void uni(int u,int v)
{
    int temp=parent[u];
    for(int i=1;i<=n;i++)
        if(parent[i]==temp)
            parent[i]=parent[v];
}
int mst(int n)
{
    sort(vec.begin(),vec.end(),fun);
    int cnt=0,tot=0;
    lop=vec.size();
    for(int i=0; i<lop; i++)
    {
        int u=vec[i].st;
        int v=vec[i].en;
        if(fin(u,v))
        {
            uni(u,v);
            tot+=vec[i].cost;
            cnt++;
            if(cnt==n-1) break;
        }
    }
    return tot;
}
set<int> st;
int main()
{
    int i,j,mi,mj,total,res,val;
    TEST
    {
        for(i=0;i<52;i++) parent[i]=i;
        sci(n);
        total=0;
        for(i=1; i<=n; i++)
        {
            for(j=1; j<=n; j++)
            {
                sci(val);
                total+=val;
                if(i==j or !val) continue;
                mi=i,mj=j;
                if(mi>mj) swap(mi,mj);
                vec.pb(node(mi,mj,val));
            }
        }
        res=mst(n);
        for(i=1; i<=n; i++)
            st.insert(parent[i]);
        if(st.size()==1)
            pf("Case %d: %d\n",test,total-res);
        else
            pf("Case %d: -1\n",test);
        vec.clear();
        st.clear();
    }
    return 0;
}

0 个答案:

没有答案