POJ 1258

  这是个水题哇,最小生成树哇,什么prim、克鲁斯卡尔,等等。。。

#include<stdio.h>
int n,graph[500][500],dis[500],use[500];
void prim(){
 int i,j,k,m,min;
 int sum=0;
 for(i=1;i<=n;i++){
  dis[i]=graph[1][i];
  use[i]=1;
 }
 use[1]=0;
 for(i=1;i<n;i++){
  min=0x7fffffff;
  for(k=2;k<=n;k++)
   if(use[k]&&dis[k]<min){
    min=dis[k];
    m=k;
   }
   sum+=min;
   use[m]=0;
   for(j=1;j<=n;j++)
    if(use[j]&&graph[m][j]!=0&&dis[j]>graph[m][j])
    
     dis[j]=graph[m][j];
   
  
 }
 printf("%d\n",sum);
 
}
int main(){
 int i,j;
 while(scanf("%d",&n)!=EOF){
 
 
 for(i=1;i<=n;i++)
  for(j=1;j<=n;j++)
   scanf("%d",&graph[i][j]);
  prim();
 }
  return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值