您的位置:首页 > 其它

swust.oj.1075

2017-04-12 19:43 267 查看
不想再去写了,去找了一个prim算法的
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;
int mp[20][20], n, e;
char str[20];

void Prim()
{
int a[20];
int min;
int b[20], i, j, k;
for (i = 0; i<n; i++)//给lowcost[]和closest[]置初值
{
a[i] = mp[0][i];
b[i] = 0;
}
for (i = 1; i<n; i++)
{
min = 101;
for (j = 0; j<n; j++)//在(V-U)中找出离U最近的顶点k
{
if (a[j] != 0 && a[j]<min)
{
min = a[j];
k = j;//k记录最近顶点的编号
}
}
cout << "(" << str[b[k]] << "," << str[k] << ")";
a[k] = 0;//标记k已经加入U
for (j = 0; j<n; j++)//修改数组lowcost和closest
{
if (mp[k][j] != 0 && mp[k][j]<a[j])
{
a[j] = mp[k][j];
b[j] = k;
}
}
}
}

int main()
{
cin >> n >> e >> str;
memset(mp, 101, sizeof(mp));
for (int i = 0; i<n; i++)
{
mp[i][i] = 0;
}
for (int j = 0; j<e; j++)
{
char l, r;
int w;
cin >> l >> r >> w;
mp[l - 'A'][r - 'A'] = w;
mp[r - 'A'][l - 'A'] = w;
}
Prim();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: