当我在下面运行我的代码时,程序崩溃并且编译器消息是Segmentation fault。我在我的代码中搜索了错误,但我找不到任何错误。我的程序似乎甚至没有进入main(),因为我已尝试使用' cout'看看它崩溃的地方,但是我没有输出,即使在主要开始之后立即“完成”。这是代码。有人能告诉我这是什么问题吗?
#include <cmath>
#include <stdio.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
struct edge_t
{
int a,b,w;
};
bool comp(edge_t a, edge_t b)
{
if(a.w < b.w)
return true;
return false;
}
vector<int> parent;
int find_parent(int x)
{
if(parent[x] == x)
return x;
parent[x] = find_parent(parent[x]);
return parent[x];
}
void join(int a,int b)
{
parent[find_parent(a)] = find_parent(b);
return;
}
int mst(vector<edge_t> v)
{
sort(v.begin() , v.end() , comp);
for(int i=0;i<v.size();++i)
parent[i] = i;
int sum = 0;
for(int i=0;i<v.size();++i)
{
if(find_parent(v[i].a) != find_parent(v[i].b))
{
join(v[i].a, v[i].b);
sum += v[i].w;
}
}
return sum;
}
int main() {
cout<<"Hello?\n"; ///does not display anything QQ
int n,m;
scanf("%d %d",&n,&m);
parent.resize(n);
int p,q,r;
vector<edge_t> edges;
int s =0;
for(int i=0;i<m;++i)
{
scanf("%d %d %d",&p,&q,&r);
edge_t tmp;
tmp.a = p;
tmp.b = q;
tmp.w = r;
s+=r;
edges.push_back(tmp);
}
printf("%d\n", s - mst(edges));
return 0;
}
我在hackerrank.com上使用在线ide(我在那里练习问题)。
答案 0 :(得分:0)
在mst
功能
for (int i = 0; i<v.size(); ++i)
parent[i] = i;
这假设parent
具有与v
相同或更多的元素,如果不是这样,则程序崩溃。
在同一个功能中,您正在拨打find_parent
并且尚未验证a
&amp; b
低于parent.size()
,如果您在find_parent
函数中选中了if (find_parent(v[i].a) != find_parent(v[i].b))
{
join(v[i].a, v[i].b);
sum += v[i].w;
}
,那就没问题,但是您也没有在那里查看。
find_parent
因此,如果int find_parent(int x)
{
if (parent[x] == x)
return x;
}
输入无效,则程序崩溃
z-index
答案 1 :(得分:-1)
根据您的编译环境,如果您启用了系统不支持的指令集(例如AVX),则可能在main之前发生崩溃(我已经在使用VC ++的Windows上看到过这种情况)。尝试编译所有关闭的优化,对于一个古老的&#34;目标架构。
根据您的平台,这也可能是由于找不到共享库,尽管这似乎不太可能。
编辑:删除了关于cout的位,因为你有一个结束行字符和main。这是一个不合时宜的想法。