多题目

克鲁斯卡尔求最小生成树思想:首先将n个点看作n个独立的集合,将所有边快排(从小到大)。然后,按排好的顺序枚举每一条边,判断这条边连接的两个点是否属于一个集合。若是,则将这条边加人最小生成树,并将两个点所在的集合合并为一个集合。若否,则跳过。直到找到n-1条边为止。

#include<iostream>

#include<algorithm>

using namespace std;

struct point{

int x;int y;int vi

point a[10000];

int cmp(const point &a,const point &b){)return 1;

if(1)

else return 0

int fat[101];

int father(int x){

if(fat[x】!-x)return fat[x]②

else return fatlx]i

void unionn(int x,int y){int famfather(x):int fb father(y);

if(fa! fb) fat[ fa].fb;

int main(){

int i,j,n,m,km0,ans=0,cnt=0;

cin>>n;

for(i=1;i<=n;i++)

for(j=l;j<=n;j++)

cin>>m;

if(m!.0){

k++;

a[k].x-i;

a[k].y-j;

a[ k].v=m;

sort(a+1,a+1+k,③);

for(i-l;i<=n;i++){

fat[i]=i;

£or(iml;i<mk;i++){

if(father(a[i].x)!= ④){ans+ a[i].v;unionn (a[i].x,a[i].y);

cnt++;

if(5)break;

cout<<ans;

return 0;


第1题 单选

1处应填

A.

a.v<b.v

B.

a.v>b.v

C.

a.v>=b.v

D.

a.y<= b.v

第2题 单选

2处应填

A.

father(x)

B.

father( fat[ x])

C.

fat(father[x])

D.

x

第3题 单选

3处应填

A.

algorithm

B.

point

C.

cmp

D.

sizeof(a)

第4题 单选

4处应填

A.

a[i].y

B.

father(a[i].y)

C.

fat[a[i].y]

D.

a[i].x

第5题 单选

5处应填

A.

cnt>0

B.

i==1

C.

ans==n-1

D.

cnt==n-1

发表评论

登录 后再回复