喜极而泣
by Pickle Cai
下午3点在论坛上发贴问了一下判空,原来是isempty。
改到现在,终于运行成功!喜极而泣!!!72行代码,全部循环当家,拖了整整38天!平均下来是一天写2行的速度啊……必然贻笑大方。不过对我已经足够。
全部程序如下:
%变量说明:用m-2记录累积人数,用b存储邻接矩阵,用c存储一维作者及其编号列表,用d存放a数组的元素及其系数的对应关系
I=97;J=6;
m=2;dm=1;
for i=1:I; %搭建邻接矩阵的框架
for j=1:J;
if ~isnan(a{i,j})
d{dm}={a{i,j},dm,i,j}; %将a数组的元素、序号及位置信息读入d数组,包括重复
dm=dm+1;
c{m-1}={a{i,j},m-1}; %将a数组的元素及序号信息读入c数组,不包括重复
if m>2
for c1=1:m-2
if isequal(c{m-1}(1),c{c1}(1)) %若出现重复,则删除新读入的c{c1};
c{m-1}=[];
break;
end
end
end
if ~isempty(c{m-1})
b{1,m}=c{m-1}{1};
b{m,1}=c{m-1}{1};
b{m,m}=0;
m=m+1;
end
end
end
end
for d1=1:dm-2 % 给邻接矩阵赋值
for d2=d1+1:dm-1
if isequal(d{d1}{1},d{d2}{1}) % 处理重复元素
c2=1; % 读取重复者的序号:c2。
while ~isequal(c{c2}{1},d{d1}{1})
c2=c2+1;
end
e={}; % 读取重复者同一行的序号
e1=1;
for d3=1:dm-1
if isequal(d{d3}{3},d{d2}{3})&(d3~=d2)
e{e1}=[d{d3}{1}];
e1=e1+1;
end
end
for e2=1:e1-1
for c3=1:c1+1
if isequal(c{c3}{1},e{e2})
b{c2+1,c3+1}=1;
b{c3+1,c2+1}=1;
end
end
end
else %处理不重复元素
if d{d1}{3}==d{d2}{3} %这个序号也要转为c序号
for c4=1:c1+1
if isequal(c{c4}{1},d{d1}{1})
for c5=1:c1+1
if isequal(c{c5}{1},d{d2}{1})
b{c{c4}{2}+1,c{c5}{2}+1}=1;
b{c{c5}{2}+1,c{c4}{2}+1}=1;
end
end
end
end
end
end
end
end
for b1=2:c1+1
for b2=2:c1+1
if isempty(b{b1,b2})
b{b1,b2}=0;
end
end
end
for b1=2:c1+2
for b2=2:c1+2
if isempty(b{b1,b2})
b{b1,b2}=0;
end
end
end
Subscribe via RSS