题目:
结果:
代码:
#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; }
还可以优化一下,会更快的
这题就是 最小生成树