| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 975 人关注过本帖, 1 人收藏
标题:本人自己写的最小生成树的算法,高手来看一下
只看楼主 加入收藏
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
结帖率:73.96%
收藏(1)
已结贴  问题点数:10 回复次数:8 
本人自己写的最小生成树的算法,高手来看一下
#include "stdio.h"
#define max 20
typedef int Status;
typedef struct ArcCell{
    int adj;
}ArcCell,AdjMatrix[max][max];
typedef struct{
  int  vexs[max];
  AdjMatrix arcs;
  int vexnum,arcnum;
}MGraph;
struct
{
    int adjvex;
   int lowcost;
}closedge[max];
Status CreateUDG(MGraph *G){
 int i,j,k;
 int v1,v2;  int w;
 printf("shuru dingdianshu and hushu:");
 scanf("%d,%d",&G->vexnum,&G->arcnum);
  printf("goujian dingdian xiangliang :");
 for(i=0;i<G->vexnum;i++)
   scanf("%d",&G->vexs[i]);
 printf("gouzao linjie juzhen :");
 for(i=0;i<G->vexnum;i++)
  for(j=0;j<G->vexnum;j++)
    G->arcs[i][j].adj=0;
 for(k=0;k<G->arcnum;k++){
   scanf("%d,%d,%d",&v1,&v2,&w);
   i=Locate(*G,v1);
   j=Locate(*G,v2);
   G->arcs[i][j].adj=w;
   G->arcs[j][i]=G->arcs[i][j];
 }
 return 1;
}

Status Locate(MGraph G,int v){
   int i;
   for(i=0;i<G.vexnum;i++)
      if(v==G.vexs[i])     return i;
   return -1;
}
int MinNum(MGraph G)
{
    int i,j=0,k=0,min=0;
    for(i=0; i<G.vexnum; i++)
    if(closedge[i].lowcost!=0)
    {
        min=closedge[i].lowcost;
        k=i;
        break;
    }
    for(j=i+1;j<G.vexnum;j++)
    if(closedge[j].lowcost!=0)
    {
        if(min>=closedge[j].lowcost)
        {
        min=closedge[j].lowcost;
        k=j;
        }
    }
    return k;
}
void MininSpanTreePrim(MGraph G,int V )
{
    int k=Locate(G,V);
    int j,i;
    for(j=0; j<G.vexnum; ++j )
    {
       if(j!=k)
       {
    closedge[j].lowcost =G.arcs[k][j].adj;
    closedge[j].adjvex=V;
       }
    }
    closedge[k].lowcost = 0;
    for(i=1; i<G.vexnum; ++i )
    {
    k=MinNum(G);
        closedge[k].lowcost = 0;
    printf("%d--%d ",closedge[k].adjvex,G.vexs[k]);
        for(j = 0; j<G.vexnum; ++j )
            if( closedge[j].lowcost > G.arcs[k][j].adj )
            {
                closedge[j].lowcost = G.arcs[k][j].adj;
        closedge[j].adjvex=G.vexs[k];
            }
    }
}
void main()
{
   MGraph G;   int v;
   int i,j;
   CreateUDG(&G);
   for(i=0;i<G.vexnum;i++){
    for(j=0;j<G.vexnum;j++)
      printf("%3d",G.arcs[i][j].adj);
    printf("\n");
   }
printf("shuru dian :");
    scanf("%d", &v);
    MininSpanTreePrim( G, v );
    printf("\n");

}

请高手改正
搜索更多相关主题的帖子: 成树 算法 小生 
2010-06-03 11:48
monk02698
Rank: 1
等 级:新手上路
帖 子:13
专家分:7
注 册:2010-5-31
收藏
得分:5 
顶一个,
2010-06-03 15:18
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
怎么没人来解啊  郁闷

Discuz!  
好好学习  天天向上
2010-06-07 14:53
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:5 
for(i=0;i<G->vexnum;i++)
  for(j=0;j<G->vexnum;j++)
    G->arcs[i][j].adj=0;//改成 一个比较大的值(表示无穷)

Status Locate(MGraph G,int v) 的定义和Status CreateUDG(MGraph *G)的定义交换下顺序
2010-06-07 19:37
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
我调试也 这么不对啊

Discuz!  
好好学习  天天向上
2010-06-12 15:15
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-06-12 17:19
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
改过之后  注意输入的格式   
2010-06-12 17:20
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
知道了

Discuz!  
好好学习  天天向上
2010-08-19 15:38
阝子健
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-6-4
收藏
得分:0 
好厉害
2011-07-07 19:45
快速回复:本人自己写的最小生成树的算法,高手来看一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038975 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved