Kruskal算法实现
kruskal algorithm implementation
我有以下图论主题的代码,最小生成树的kruskal算法
#include<iostream>
#include<stdlib.h>
using namespace std;
int cost[10][10],i,j,k,n,m,c,visit,visited[10],l,v,count,count1,vst,p;
int main(){
int dup1,dup2;
cout<<" enter number of vertices "<<endl;
cin>>n;
cout<<"enter number of edges "<<endl;
cin>>m;
cout<<" EDGES Cost "<<endl;
for(k=1;k<=m;k++){
cin>>i>>j>>c;
cost[i][j]=c;
cost[j][i]=c;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(cost[i][j]==0)
cost[i][j]=31999;
visit=1;
while(visit<n){
v=31999;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(cost[i][j]!=31999 && cost[i][j]<v && cost[i][j]!=-1)
{
int count=0;
for(p=1;p<=n;p++){
if(visited[p]==i || visited[p]==j)
count++;
}
if(count>=2){
for(p=1;p<=n;p++)
if(cost[i][p]!=31999 && p!=j)
dup1=p;
for(p=1;p<=n;p++)
if(cost[j][p]!=31999 && p!=i)
dup2=p;
if(cost[dup1][dup2]==-1)
continue;
}
l=i;
k=j;
v=cost[i][j];
}
cout<<" edgde from "<<l<<" --> "<<k;
cost[l][k]=-1;
cost[k][l]=-1;
visit++;
int count=0;
count1=0;
for(i=1;i<=n;i++)
{
if(visited[i]==1)
count++;
if(visited[i]==k)
count1++;
}
if(count==0)
visited[++vst]=1;
if(count1==0)
visited[++vst]=k;
}
return 0;
}
适用于以下输入
1 2 1
2 3 2
3 4 3
1 3 3
其中顶点数和边数都是4,得到这样的输出
edge from 1–>2edge from 2–>3edge from 1–>3
我的问题是有任何语义错误吗?我还使用了数组和许多变量,我可以缩短这段代码吗?我的(编程)语言是c++
用户输入可以很容易地破坏这段代码:如果用户为n或m提供等于或大于10的值,则可以运行数组的末尾
相关文章:
- std::unordered_map 搜索算法是如何实现的?
- 如何实现高效的算法来计算大型数据集的多个不同值?
- 了解算法的性能差异(如果以不同的编程语言实现)
- 它是否定义了哪些算法可以接受可变 lambda 的实现?
- 为什么在此排序算法实现中,向量明显比数组慢?
- 快速实现 PRIM 算法
- 如何知道用于实现标准代码段的确切数据结构和算法,例如在C++STL中?
- 在 Eigen3 中实现 Bartels-Stewart 算法 -- 仅实矩阵?
- 在 c++ 或 python 中生成一个体面的视差图以在 Raspberry Pi 上实现的最佳方法(算法或函数)是什么
- 字母C++实现中的 Prim 算法
- 尝试实现二叉搜索算法,似乎无法使其工作
- C++17 并行算法已经实现了吗?
- AES_XCBC算法的实现
- C++ GDAL 算法 GDALFillNodata() 的实现
- 如何检查 CNG Windows API 是否返回符合 FIPS 的算法实现
- OpenMP:共享同一算法的单线程和多线程实现
- 使用L1CPUCache实现c++算法的Python
- 实现算法(气泡排序)来组织阵列
- 实现O(n)算法来确定字符串是否所有字符都是唯一的
- 我应该如何去实现算法与黑白和彩色图像使用