例题:最优布线问题

#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;
}