c++11 - 谁能告诉我 prim 函数的错误?
问题描述
prim 函数有问题。我猜是分段错误。请帮我解决一下这个。我现在已经尝试了很多。s 是实际上无关紧要的起始顶点。arr 是一个存储权重的二维数组。V 是存储相邻边的二维数组。检查数组存储最小距离。访问商店访问的节点。
#define INF 99999;
typedef long int ull;
bool visit[3000]={false};
vector<ull>check(3000,0);
void prim(ull in,vector<ull>V[],ull **arr)
{
ull i;
visit[in]=true;
for(i=0;i<V[in].size();i++)
{
if(!visit[V[in][i]])
{
check[V[in][i]]=min(check[V[in][i]],arr[in][V[in][i]]);
}
}
check[in]=INF;
}
void solve()
{
ull i,j,n,e,s,u,v,w;
cin>>n>>e;
vector<ull>V[n];
ull **arr=new ull*[n];
for(i=0;i<n;i++)
{
arr[i]=new ull[n];
}
for(i=0;i<n;i++)
{
check[i]=INF;
}
for(i=0;i<e;i++)
{
cin>>u>>v>>w;
u--;
v--;
arr[u][v]=w;
arr[v][u]=w;
V[u].push_back(v);
V[v].push_back(u);
}
cin>>s;
s--;
ull ind,ad=0;
check[s]=0;
for(i=0;i<n;i++)
{
auto it=min_element(check.begin(),check.end());
ad+=check[it-check.begin()];
ind=(it-check.begin());
prim(ind,V,arr);
}
cout<<ad<<"\n";
}
解决方案
您不能使用 long int 作为静态数组的索引。您的向量是 ull 类型,然后将其用作 bool 数组访问的索引。
您的选择是动态分配访问数组,或更改向量的数据类型。
推荐阅读
- python - 使用列标题和行值创建新列
- cs50 - 每个 if 公式的输出,CS50 问题集学分
- javascript - 如何将 jQuery 功能与分组元素分组?
- python - Django:通过列表过滤器获取查询集(填充和/或空)
- r - Rcpp 和 boost:它应该可以工作,但不能
- c# - 如何将 ushort 16 位数组转换为图像 C#
- node.js - 带有 Node JS、Express、Heroku 的 Websocket:添加路由会中断 Web 套接字连接
- html - Safari 不支持媒体查询:显示:要显示的表格单元格:块
- apache-kafka - ulimit、lsof、cat /proc/sys/fs/file-max 的区别
- mysql - 无法插入显示外键约束的数据失败错误 1452