给出的已经联通的道路,直接将道路的距离赋值为0就可以了。。。。
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int max_v=1000;
const int INF = 10000000;
int cost[max_v][max_v];
int mincost[max_v];
bool used [max_v];
int v;
int prim()
{
for(int i=0; i<v; i++)
{
mincost[i]=INF;
used[i]=false;
}
mincost [0]=0;
int res=0;
while(true)
{
int now=-1;
for(int u=0; u<v; u++)
{
if(!used[u]&&(now==-1||mincost[u]<mincost[now])) now=u;
}
if(now==-1) break;
used[now]=true;
res+=mincost[now];
for(int u=0; u<v; u++)
{
mincost[u]=min(mincost[u],cost[now][u]);
}
}
return res;
}
int main ()
{
scanf("%d",&v);
{
int from,to,Cost;
for(int i=0; i<v; i++)
{
for(int j=0;j<v;j++)
{
scanf("%d",&Cost);
cost[i][j]=Cost;
cost[j][i]=Cost;
}
}
int n;
scanf("%d",&n);
int a,b;
for(int i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
a--;
b--;
cost[a][b]=0;
cost[b][a]=0;
}
int res=prim();
printf("%d\n",res);
}
return 0;
}
POJ2412(最简单的prim)
最新推荐文章于 2019-12-26 14:42:13 发布