POJ1258 Agri-Net【最小生成樹】
阿新 • • 發佈:2017-10-10
ios rim def define sin pri ret fine 輸出
題意:
有n個農場,已知這n個農場都互相相通,有一定的距離,現在每個農場需要裝光纖,問怎麽安裝光纖能將所有農場都連通起來,並且要使光纖距離最小,輸出安裝光纖的總距離。
思路:
又是一個最小生成樹,因為給出了一個二維矩陣代表他們的距離,直接算prim就行了。
代碼:
#include <iostream> using namespace std; #define maxn 105 #define inf 0x3f3f3f3f int 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]<mi) { mi=d[j]; v=j; } vis[v]=1; 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<<d[0]<<endl; } int main() { int i,j; while(cin>>n) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>map[i][j]; Prim(); } return 0; }
POJ1258 Agri-Net【最小生成樹】