| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 335 人关注过本帖, 1 人收藏
标题:最小生成树
只看楼主 加入收藏
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
结帖率:79.37%
收藏(1)
已结贴  问题点数:20 回复次数:2 
最小生成树
我写了个最小生成树prim算法,但是不管怎么测试,输出结果都是0,请各位高手帮我看看
测试数据:
输入:
7 11
1 2 7
1 4 5
2 3 8
2 4 9
2 5 7
3 5 5
4 5 15
4 6 6
5 6 8
5 7 9
6 7 11
输出:
39

#include <stdio.h>
#include <stdlib.h>
#define MAX 999999
int dis[100];
void prim(long map[100][100],int n,int start)
{
    int mark[100]={0};
    int i,j,k,min,sum=0;
    for(i=0;i<n;i++)
    {
    mark[i]=0;
    dis[i]=map[start][i];
    }
    mark[start]=1;dis[start]=0;
    for(i=0;i<n;i++)
    {
    min=MAX;
    for(j=0;j<n;j++)
    if(mark[j]==0&&min>dis[j])
    {
    min=dis[j];
    k=j;
    }
    if(min==MAX) break;
    sum=sum+min;
    mark[k]=1;
    for(j=0;j<n;j++)
    if(mark[j]==0&&dis[j]>map[k][j])
    {
    dis[j]=map[k][j];
    mark[j]=k;
    }
    }
    printf("%d\n",sum);
}
int main()
{
 long map[100][100];
 int m,n,i,j;
 int start,end,length;
 scanf("%d %d",&n,&m);
 for(i=0;i<100;i++)
 for(j=0;j<100;j++)
 map[i][j]=MAX;
 for(i=0;i<m;i++)
 {
 scanf("%d %d %d",&start,&end,&length);
 map[end][start]=map[start][end]=length;
 }
 start=0;
 prim(map,n,start);
 system("pause");
 return 0;
}
搜索更多相关主题的帖子: include start 
2011-03-30 20:01
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-03-31 17:39
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:20 
#include <stdio.h>
#include <stdlib.h>
#define MAX 999999
int dis[100];
void prim(long map[100][100],int n,int start)
{
    int mark[100]={0};
    int i,j,k,min,sum=0;
    for(i=0;i<n;i++)
    {
        mark[i]=0;
        dis[i]=map[start][i];
    }
    mark[start]=1;
    for(i=0;i<n;i++)
    {
        min=MAX;
        for(j=0;j<n;j++)
            if(mark[j]==0&&min>dis[j])
            {
                min=dis[j];
                k=j;
            }
            if(min==MAX) break;
            sum=sum+min;
            mark[k]=1;
            for(j=0;j<n;j++)
                if(mark[j]==0&&dis[j]>map[k][j])
                {
                    dis[j]=map[k][j];
                    
                }
    }
    printf("%d\n",sum);
}
int main()
{
    long map[100][100];
    int m,n,i,j;
    int start,end,length;
    scanf("%d %d",&n,&m);
    for(i=0;i<100;i++)
        for(j=0;j<100;j++)
            map[i][j]=MAX;
        for(i=0;i<m;i++)
        {
            scanf("%d %d %d",&start,&end,&length);
            map[end-1][start-1]=map[start-1][end-1]=length;
        }
        prim(map,n,0);
        system("pause");
        return 0;
}

老问题  他是从1开始的    给我分吧  哈哈
2011-03-31 20:44
快速回复:最小生成树
数据加载中...
 
   



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

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