题目大意:
有n的村庄,告诉你每个村庄间的距离,想要修路将所有的村庄连接起来,
问:修路的最短距离是多少?
输入:
第一行 n,表示有多少个村庄
第2行到第n+1行,表示村庄间的距离
接下来一行,表示有q个村庄直间有路,不需要重新修路(即修路距离为0)
接下里q行,每一行表示这两个村庄之间通路
思路:
标准的prim算法,但是别忘了处理两个村庄已经连接的问题
code:
#include
#include
using namespace std;
const int maxn=0xfff;
int d[101][101];
int m[101];
bool v[101];
int main()
{
int n;
while(cin>>n)
{
int x,y;
for(int i=1; i<=n; ++i)
{
m[i]=maxn;
v[i]=true;
for(int j=1; j<=n; ++j)
{
cin>>d[i][j];
if(i==j)
d[i][j]=maxn;
}
}
int q;
cin>>q;
for(int i=1; i<=q; ++i)//表示两个村庄已经连接
{
cin>>x>>y;
d[x][y]=0;
d[y][x]=0;
}
m[1]=0;
m[0]=maxn;
for(int i=1; i<=n; ++i)
{
int k=0;
for(int j=1; j<=n; ++j)
if(v[j]&&(m[j]
//完美的代码