• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 联系
  • 订阅
  • 管理

View Post

sicily 1090 Highways 最小生成树

         题目是求最长的边,在生成最小生成树时,用一个变量保存最大的值即可

 

//Prim算法
#include <iostream>
#include <memory.h>
#define INF 1000000
#define MAX 200
using namespace std;

int main()
{
	int arcs[MAX][MAX];
	bool isvisit[MAX];
	int min_weight[MAX];

	int N;
	int cases;

	cin >> cases;

	while (cases--)
	{
		cin >> N;
		memset(isvisit, false, sizeof(isvisit));

		for (int i = 0; i < N; i++)
			for (int j = 0; j < N; j++)
				cin >> arcs[i][j];

		for (int i = 0; i < N; i++)
			min_weight[i] = arcs[0][i];

		isvisit[0] = true;
		int _min;
		int hold, result = 0, max_weight = 0;
		for (int i = 1; i < N; i++)
		{
			_min = INF;
			
			for (int j = 0; j < N; j++)
			{
				if (!isvisit[j] && min_weight[j] < _min)
				{
					_min = min_weight[j];
					hold = j;

				}
			}	
			max_weight = max(max_weight, _min);
			result += _min;

			isvisit[hold] = true;

			for (int j = 0; j < N; j++)
				if (!isvisit[j] && arcs[hold][j] < min_weight[j])
					min_weight[j] = arcs[hold][j];
		}

		cout << max_weight << endl ;
		if (cases != 0)
			cout << endl;
	}

	return 0;
}

posted on 2010-12-08 12:03  sysuwhj  阅读(1094)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3