“部落找关系”(作者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号是否有关系?
结果:他们有关系。