function temserch(t,yzd)
global fhx bs tem u;
%%%%%%%%%%%%%%%%% 寻找连接矩阵tem %%%%%%%%%%%%%%%
jj=find(fhx==t);
if sum(jj)~=0
u=u+1;
end
%%%%%%%%%%%% 找到与该点相关的点并写到tem的最后一列 %%%%%%%%%%%%%
for i=1:size(jj,1)
if jj(i)<=bs
tem(i,u)=fhx(jj(i),2);
else
jj(i)=jj(i)-bs;
tem(i,u)=fhx(jj(i),1);
end
end
%%%%%%%%%%%%% 将第二列的已知点删除,以免出现“假导线” %%%%%%%%%%%%%%
for i=1:size(tem,1)
if pd(tem(i,2),yzd)
tem(i:end-1,2)=tem(i+1:end,2);
tem(end,2)=0;
end
end
%%%%%%%%%%%%% 已经找过的点不再找 %%%%%%%%%%%
for i=2:u-1
j=find(tem(:,u)==tem(1,i));
if j
tem(j:end-1,u)=tem(j+1:end,u);
tem(end,u)=0;
end
end
j=find(tem(:,3)==tem(1));
tem(j:end-1,3)=tem(j+1:end,3);
tem(end,3)=0;
%%%%%%%%%%%%% 已知点紧跟的点已经找完了,该结束了 %%%%%%%%%%
if tem(1,2)==0
tem(1)=0;
return
end
%%%%%%%%%%%%% 寻找到盲端 %%%%%%%%%%%%%
if sum(tem(:,u))==0
tem=ydys(tem,u); %往后退了一步
u=u-1;
% temserch(tem(1,u),yzd);
end
yp;
return
function yp
global tem u yzd
%%%%%%%%%%%%%% 如果最后一列的第一个元素不是已知点,继续往下寻找 %%%%%%%%%%%%%%%
if pd(tem(1,u),yzd)==0
temserch(tem(1,u),yzd);
else %%%%%%%%%%%% 反之此点为已知点 %%%%%%%%
if pp(tem(1),tem(1,u)) %表示该附和导线已经寻找过了
[tem gg]=ydys(tem,u); %往后退了一步或者用下一个点往下找
u=u-gg;
yp;
else
cc(yzd);
if u==1
return
else
temserch(tem(1,u),yzd);
end
end
end
return
function cc(yzd)
%%%%%%%% 存储数据子程序,方便递归调用 %%%%%%%%%%%%%%
global tem u k du fhh jjr;
%zxu=u;
%yzdt(find(yzdt==tem(1,1)))=[]; %把找过的已知点从yzdt中删除
fhh(k,:)=tem(1,:);
k=k+1;
jjr(k)=tem(1,u);
if sum(pd(yzd,jjr))==sum(ones(size(yzd)));
tem(:,:)=0;
end
tem(:,u)=zeros(max(du(:,2)),1); %删除最后一列
tem=ydys(tem,u);
u=u-1;
if pd(tem(1,u),yzd)
if u>1
if pp(tem(1),tem(1,u))==0
k=k-1;
cc(yzd);
end
end
end
return
function t=pp(a,b)
%%%%%%% 判断a,b组成的向量是不是包含在fhxt中 %%%%%%%%%%
global fhxt;
t=0;
l=size(fhxt,1);
j=find(a==fhxt);
for i=1:length(j)
if j(i)<=l
if fhxt(j(i)+l)==b
t=1;
end
end
if j(i)>l
if fhxt(j(i)-l)==b
t=1;
end
end
end
return
这个函数中我就重复调用了temserch函数,最后如果一级级返回的话可能会很麻烦啊!