C++ prims算法中的父数组始终为零
我有以下函数来查找父数组,以便使用Prim算法获得图的最小生成树C++ prims算法中的父数组始终为零,c++,prims-algorithm,C++,Prims Algorithm,我有以下函数来查找父数组,以便使用Prim算法获得图的最小生成树 #include<stdlib.h> #include <limits.h> #include <iostream> int printMST(int parent[], int n, int** graph) { for (int i = 1; i < n; i++) std::cout<<parent[i]<<" - "<<i<<"
#include<stdlib.h>
#include <limits.h>
#include <iostream>
int printMST(int parent[], int n, int** graph)
{
for (int i = 1; i < n; i++)
std::cout<<parent[i]<<" - "<<i<<" "<<graph[i][parent[i]]<<"\n";
}
int* prim(int** graph,int no_of_vertices);
int main(){
int no_of_vertices;
std::cin>>no_of_vertices;
int** graph = new int*[no_of_vertices];
for(int i = 0; i < no_of_vertices; ++i)
graph[i] = new int[no_of_vertices];
for(int i = 0; i <no_of_vertices; ++i)
for(int j = 0; j < no_of_vertices; ++j)
std::cin>>graph[i][j];
int* parent;
parent= prim(graph,no_of_vertices);
// Print the solution
printMST(parent, no_of_vertices, graph);
return 0;
}
int nodeWithMinKey(int key[],bool mst[], int no_of_vertices)
{
int min=1000,min_index;
for(int i=0;i<no_of_vertices;i++)
{
if(mst[i]=false && key[i]<min)
{
min=key[i];
min_index=i;
}
}
return min_index;
}
int* prim(int** graph, int no_of_vertices){
int* parent = (int*)malloc(sizeof(int)*no_of_vertices);
int key[100];
bool mst[100];
int i;
for(i = 0; i<no_of_vertices; i++)
{
key[i] = 1000;
mst[i] = false;
}
key[0] = 0;
parent[0] = -1;
for(i = 0; i<no_of_vertices-1; i++)
{
int u = nodeWithMinKey(key, mst, no_of_vertices);
mst[u] = true;
for(int v = 0; v<no_of_vertices; v++)
{
if(graph[u][v] && mst[v] == false && graph[u][v] < key[v])
{
parent[v] = u;
key[v] = graph[u][v];
}
}
}
return parent;
}
#包括
#包括
#包括
int printMST(int parent[],int n,int**graph)
{
对于(int i=1;i
if(mst[i]=false && key[i]<min)
if(mst[i]=false&&key[i]调试并找出答案!你如何调用函数?你的输入数据是什么?你期望得到什么输出?你知道吗?@JoachimPileborg我调试了程序,发现最小索引总是返回“0”。你的输入是什么?期望和实际输出是什么?是否没有顶点
总是小于或等于 100
?没有输入值会大于1000
?@JoachimPileborg是的,顶点的数量总是大于x,用于查看编码,这与其他编码不同。实际上,“调试并找出”可能是比这更有用的答案,学习逐步完成代码和调试是你能做的最有用的事情之一。