题意:
有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离。
思路:
又是一个最小生成树,因为给出了一个二维矩阵代表他们的距离,直接算prim就行了。
代码:
#includeusing namespace std;#define maxn 105#define inf 0x3f3f3f3fint map[maxn][maxn],n;void Prim(){ int i,j,d[maxn],vis[maxn],mi,v; for(i=1;i<=n;i++) { d[i]=map[1][i]; vis[i]=0; } for(i=1;i<=n;i++) { mi=inf; for(j=1;j<=n;j++) if(!vis[j] && d[j] map[v][j]) d[j]=map[v][j]; } for(d[0]=0,i=1;i<=n;i++) d[0]+=d[i]; cout< < >n) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>map[i][j]; Prim(); } return 0;}