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;
}
#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 閱讀(1038) 評(píng)論(0) 編輯 收藏 引用 所屬分類: Algorithm 、USACO 、圖論