USACO Agri-Net
View Code
bool connectedMap[100];
int findMin(int map[100][100], int farm_num, int& posi, int& posj, bool bFirstTime)
{
int min = 9999999;
int mini=-1, minj=-1;
for(int i=0; i<farm_num; i++)
for(int j=0; j<i; j++)
{
if(false == bFirstTime &&
(
(connectedMap[i] && connectedMap[j])
|| (!connectedMap[i] && !connectedMap[j])
)
)
continue;
if( map[i][j] < min )
{
min = map[i][j];
mini= i; minj = j;
}
}
posi = mini;
posj = minj;
return min;
}
bool IsAllConnected(int farm_num)
{
for(int i=0; i<farm_num; i++)
if(connectedMap[i] == false)
return false;
return true;
}
int main()
{
int distMap[100][100];
int farm_num;
cin >> farm_num;
for(int i=0; i<farm_num; i++)
for(int j=0; j<farm_num; j++)
{
int dist; cin >> dist;
distMap[i][j] = dist;
}
for(int i=0; i<farm_num; i++)
connectedMap[i] = false;
int sum = 0;
bool bFirstTime = true;
while(false == IsAllConnected(farm_num))
{
int i, j;
int min = findMin(distMap, farm_num, i, j, bFirstTime);
bFirstTime = false;
sum += min;
connectedMap[i] = true;
connectedMap[j] = true;
}
cout << sum << endl;
return 0;
}
int findMin(int map[100][100], int farm_num, int& posi, int& posj, bool bFirstTime)
{
int min = 9999999;
int mini=-1, minj=-1;
for(int i=0; i<farm_num; i++)
for(int j=0; j<i; j++)
{
if(false == bFirstTime &&
(
(connectedMap[i] && connectedMap[j])
|| (!connectedMap[i] && !connectedMap[j])
)
)
continue;
if( map[i][j] < min )
{
min = map[i][j];
mini= i; minj = j;
}
}
posi = mini;
posj = minj;
return min;
}
bool IsAllConnected(int farm_num)
{
for(int i=0; i<farm_num; i++)
if(connectedMap[i] == false)
return false;
return true;
}
int main()
{
int distMap[100][100];
int farm_num;
cin >> farm_num;
for(int i=0; i<farm_num; i++)
for(int j=0; j<farm_num; j++)
{
int dist; cin >> dist;
distMap[i][j] = dist;
}
for(int i=0; i<farm_num; i++)
connectedMap[i] = false;
int sum = 0;
bool bFirstTime = true;
while(false == IsAllConnected(farm_num))
{
int i, j;
int min = findMin(distMap, farm_num, i, j, bFirstTime);
bFirstTime = false;
sum += min;
connectedMap[i] = true;
connectedMap[j] = true;
}
cout << sum << endl;
return 0;
}

浙公网安备 33010602011771号