例题:最优布线问题
#include <bits/stdc++.h>
using namespace std;
int n,sum,dis[105],a[105][105];
void prim(int x)
{
sum = 0;
int k = 0;
for (int i = 1; i <= n; i++) dis[i] = a[x][i];
dis[x] = 0;
for (int i = 2; i <= n; i++)
{
int min = 0x7f7f7f7f;
for (int j = 1; j <= n; j++)
{
if (dis[j] < min && dis[j] != 0)
{
min = dis[j];
k = j;
}
}
sum += dis[k];
dis[k] = 0;
for (int j = 1; j <= n; j++)
{
if (dis[j] > a[k][j]) dis[j] = a[k][j];
}
}
cout << sum << endl;
}
int main()
{
cin >> n;
memset(dis,0x7f,sizeof(dis));
for (int i = 1 ; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> a[i][j];
}
}
prim(2);
return 0;
}