3-1 agrinet

 

题目:

USACO

NOCOW

结果:

 

代码:

#include<fstream>
using namespace std;

struct Map
{
   int length;
   bool intree;
};

int length,total,Arc[100][100];
Map a[100];

int findTheShortest()
{
    int i,j,shortest=1000000;
    for(i=0;i<total;i++)
       if(a[i].intree==false&&a[i].length<shortest)
         {shortest=a[i].length;
          j=i;
          }
    return j;
}

void refrush(int n)
{
    int i;
    for(i=0;i<total;i++)
       if(a[i].intree==false&&Arc[i][n]<a[i].length)
          a[i].length=Arc[i][n];    
}

int main()
{
    //ifstream cin("1.txt");
    //ofstream cout("2.txt");
    ifstream cin("agrinet.in");
    ofstream cout("agrinet.out");
    cin>>total;
    int i,j;
    for(i=0;i<total;i++)
       for(j=0;j<total;j++)
       {
          cin>>Arc[i][j];
       }
    
    for(i=0;i<total;i++)
    {
      a[i].length=1000000;
      a[i].intree=false;
    }
    
    a[0].length=0;
    for(i=0;i<total;i++)
    {
       j=findTheShortest();
       a[j].intree=true;
       refrush(j);
    }
    
    length=0;
    while(total--)
    {
      length+=a[total].length;
    }
    cout<<length<<endl;
    
    return 0;
}

还可以优化一下,会更快的
这题就是 最小生成树
posted @ 2012-04-25 13:07  无殇天下  阅读(155)  评论(0)    收藏  举报