这是我在网上搜的克鲁斯卡尔的算法,谁能给我说说里面的parent数组和FIND函数的意思和作用啊!

[复制链接]
查看11 | 回复1 | 2011-3-13 12:53:29 | 显示全部楼层 |阅读模式
/****************************** 结构体部分 ****************************/
typedef struct ArcNode
{
int adjvex;//该弧指向的顶点的位置
struct ArcNode *nextarc;//指向下一条弧的指针
InfoType *info;//该弧相关信息指针
}ArcNode;
typedef struct VNode
{
VertexType data;//顶点信息
ArcNode *firstarc;//指向第一条依附于该顶点的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct
{
AdjList vertices;
int vexnum,arcnum;//弧的顶点数和弧数
int kind;//弧的类型
}ALGraph;
typedef int VRType;
typedef struct
{
int begin,end;
VRType cost;
}EDGE;
/****************************** 函数操作部分 ****************************/
void Swapn(EDGE *edges,int i,int j) //交换
{
int temp;
temp=edges.begin;
edges.begin=edges[j].begin;
edges[j].begin=temp;
temp=edges.end;
edges.end=edges[j].end;
edges[j].end=temp;
temp=edges.cost;
edges.cost=edges[ j].cost;
edges[j].cost=temp;
}
void Sort(EDGE *edges,ALGraph G)
{
int i,j;
for(i=1;i=G.vexnum;i)
for(j=i;j=G.vexnum;j)
if(edges.costedges[j].cost)

Swapn(edges,i,j);

}
int Find(int *parents,int f)
{
if(parents[f]0)
f=parents[f];
return (f);
}
void MiniSpanTree_Kruskal(ALGraph G)
{
int i,v1,v2,value,bnf,edf;
int parents[MAX_VERTEX_NUM];
EDGE edges[MAX_VERTEX_NUM];
printf(\"请输入顶点和边的数量:\\n\");
scanf(\"%d%d\",
for(i=1;i=G.arcnum;i)
{
printf(\"请输入第%d条边的两个顶点和权值:\\n\",i);
scanf(\"%d%d%d\",
edges.begin=v1;
edges.end=v2;
edges.cost=value;
}
Sort(edges,G);

for(i=1;i=G.vexnum;i)
parents=0;
printf(\"\\n结果是:\\n\");
for(i=1;i=G.vexnum;i)
{
bnf=Find(parents,edges.begin);
edf=Find(parents,edges.end);
if(bnf!=edf)
{
parents[bnf]=edf;
printf(\"Arc(%d,%d):%d\\n\",edges.begin,edges.end,edges.cost);
}
}
}
/****************************** 主函数部分 ****************************/
void main()
{
ALGraph G;
MiniSpanTree_Kruskal(G);
回复

使用道具 举报

千问 | 2011-3-13 12:53:29 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">如果你结果不同,应该式你的程序或算法有问题;
以前,我写过,后者算法容易错,多检查检查!!!

















<h4 class=\"ask\">追问





<pre class=\"replyask-text\" id=\"content-463847\">我自己不会写!网上搜的 就那两个地方没看懂是什么意思
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行