【无标题】算法竞赛,--陈小玉著作

“部落找关系”(作者C语言较烂,使用Matlab编程)

给定部落总人数,以及现有关系,若x、y是亲戚,x、z是亲戚,则z、y是亲戚;同时x的亲戚也是y的亲戚。随机给定两人,判断有无关系?

结合已知关系信息,刷新:

function fa=renewal(fa,a,b)
if fa(a)~=fa(b)
    k=min(fa(a),fa(b));
    fa(a)=k;
    fa(b)=k;
end
end

给定一个人,找出其祖宗:
    function y=findss(fa,x)%寻找祖宗法
if x~=fa(x)
    y=findss(fa,fa(x));%函数嵌套
else
    y=fa(x);
end
end

脚本文件:输入x、y,给出关系

clc 
clear all
p=input('请输入关系数:');
A=zeros(2,p);
A(1,:)=input('请输入关系上层:');
A(2,:)=input('请输入关系下层:');
n=input('请输入部落总人数:');
fa=zeros(1,n);
for i=1:n%得到部落信息
    fa(i)=i;
end
for k=1:p   
fa=renewal(fa,A(1,k),A(2,k));%刷新信息
end
x=input('请输入所需查找对象上层:');
y=input('请输入所需查找对象下层:');
if findss(fa,x)==findss(fa,y)
    disp('他俩有关系');
else
    disp('他俩没有关系');
end

实践部分:

下面部落四人,1号与4号有关系,2号与4号有关系,判断1号与2号是否有关系?

 结果:他们有关系。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值