USACO 3.1 Agri-Net

最小生成树问题

#include <iostream>
#include 
<fstream>

using namespace std;

ifstream 
in("agrinet.in");
ofstream 
out("agrinet.out");


int graph[100][100];
int n;
int remain;
int shortest[100];
bool visited[100];

void add(int node)
{
    visited[node] 
= true;
    
for(int i=0;i<n;++i){
        
if(!visited[i]){
            shortest[i] 
= min(shortest[i],graph[node][i]);
        }
    }
}

int get_min()
{
    
int res = 0;
    
int value = INT_MAX;
    
for(int i=0;i<n;++i){
        
if(!visited[i]){
            
if(shortest[i]<value){
                value 
= shortest[i];
                res 
= i;
            }
        }
    }

    
return res;
}


void solve()
{
    
in>>n;
    
for(int i=0;i<n;++i)
        
for(int j=0;j<n;++j)
            
in>>graph[i][j];

    memset(visited,
0,sizeof(visited));
    
for(int i=0;i<n;++i)
        shortest[i] 
= INT_MAX;

    
int res = 0;
    remain 
= n;

    add(
0);
    remain
--;

    
while(remain--){
        
int t = get_min();
        res
+=shortest[t];
        add(t);
    }
    
    
out<<res<<endl;
}

int main(int argc,char *argv[])
{
    solve(); 
    
return 0;
}


posted on 2009-06-29 21:48 YZY 阅读(1029) 评论(0)  编辑 收藏 引用 所属分类: AlgorithmUSACO图论


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜