⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zzxysf14.m

📁 这是本人在2005年参加全国大学生电工建模做b题的相关资料
💻 M
字号:
clear
i=1;
sum0=0;
a=[0	1	1	0	0	0	0	0	1	0	0	0	1	0
0	0	0	0	0	0	0	1	0	0	1	1	0	0
0	1	0	1	0	0	0	0	0	1	0	0	0	0
0	0	1	0	0	0	0	1	0	0	0	1	0	0
0	0	0	0	0	0	0	0	0	0	1	0	1	1
0	0	0	0	1	1	0	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0	0	0	0	1	1	0
0	0	0	0	0	0	0	0	0	1	0	0	0	1
0	1	0	1	0	0	0	0	0	1	1	0	0	0
1	1	0	1	0	0	1	0	0	0	0	0	0	0
0	1	0	1	0	0	0	0	0	0	0	0	1	1
0	0	0	0	0	0	0	1	0	1	0	0	0	0
0	0	0	0	1	0	0	0	0	1	0	0	0	1
0	0	1	1	0	0	0	1	0	0	0	0	0	0
0	0	1	0	0	0	0	1	0	0	0	1	0	0
0	0	0	0	0	0	0	0	1	0	1	1	0	0
0	0	0	0	0	1	0	0	0	0	0	0	0	1
0	0	0	0	0	0	1	0	0	0	0	1	0	0
0	0	1	0	0	0	0	0	0	1	0	0	0	0
1	0	0	1	0	0	0	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0	1	0	0	0	0	1
0	1	0	0	1	0	0	0	0	0	0	0	0	0
0	0	0	0	0	0	1	0	0	0	0	1	0	0
0	0	0	0	0	0	1	1	0	0	0	0	1	1
1	1	0	0	0	0	0	0	0	1	0	0	0	0
0	0	0	0	1	0	0	0	0	0	0	0	0	1
0	0	0	0	0	1	0	0	0	0	1	0	0	0
0	1	0	0	0	0	0	1	0	0	0	0	0	0
1	0	0	0	0	0	0	0	0	0	1	1	0	0
0	0	0	1	1	0	0	0	0	0	0	0	0	0
0	0	0	0	0	1	0	1	0	0	0	1	0	0
0	0	0	0	0	0	1	0	0	1	0	0	0	0
0	0	0	1	0	1	0	0	0	0	0	0	0	0
1	0	1	0	0	0	0	0	0	0	0	0	1	1
0	0	0	0	1	1	0	0	0	0	0	1	0	0
0	0	0	1	0	0	1	0	0	0	0	0	0	0
1	0	0	0	0	0	0	0	1	1	0	0	0	0
0	0	0	0	0	1	0	1	0	1	0	0	0	1
0	0	0	0	1	0	0	1	1	0	0	0	1	0
0	0	0	0	0	1	1	0	1	0	0	0	1	0
];
%--------------------------------------------------------------%
%把运动员参加运动的对应情况表现在矩阵a中,其中行号代表运动员编号,列号
%代表运动项目编号,a[i,j]=1代表编号为i的运动员参加编号为j的运动项目,
%若为a[i,j]=0则表示编号为i的运动员不参加编号为j的运动项目
%--------------------------------------------------------------%
b=a'*a;
%--------------------------------------------------------------%
%当k不等于l时,b[k,l]代表当编号为k的运动项目与编号为l的运动项目挨在一
%起举行时,连续参加这两项比赛的运动员人次,当k=l时表示参加编号为k的项目
%的运动员人次
%-------------------------------------------------------------%
[H,L]=size(b);
for i=1:H
    BB(i)=b(i,i);
    b(i,i)=Inf;
end
%为了方便下面的计算,我们把矩阵的对角线上的元素赋值为正无穷,此时,这些
%元素已经没有了具体意义.
%-------------------------------------------------------------%
bb=b;
%-------------------------------------------------------------%
%把矩阵b赋值给另外一个矩阵bb
%-------------------------------------------------------------%
Y=zsly(b);
i=Y(1);
j=Y(2);
xx(1)=i;
xx(2)=j;
jsq=2;
b(i,:)=Inf;
B=b';
B(j,:)=Inf;
b=B';
k=0;
Y=[];
while min(min(b))~=Inf
    x=0;
    k=0;
    b(j,i)=Inf;
    jsq=jsq+1;
    CC=b';
    MI=min(b(j,:));
    mi=min(CC(i,:));
    if MI<=mi
        for x=1:L
            if b(j,x)==MI
                k=k+1;
                t(k)=x;
            end
        end
        for ii=1:k
            Y(ii)=BB(t(ii));
        end
        x=max(Y);
        for ii=1:k
            if Y(ii)==x
                break;
            end
        end
        xx(jsq)=j;
        j=t(ii);
        b(xx,:)=Inf;
        bbb=b';
        bbb(j,:)=Inf;
        b=bbb';
        xx(jsq)=j;
        Y=[];
        t=[];
    else
        for x=1:L
            if CC(i,x)==mi
                k=k+1;
                t(k)=x;
            end
        end
        for ii=1:k
            Y(ii)=BB(t(ii));
        end
        x=max(Y);
        for ii=1:k
            if Y(ii)==x
                break;
            end
        end
    jj=i;
    i=t(ii);
    CC(jj,:)=Inf;
    CC=CC';
    CC(i,:)==Inf;
    for ii=jsq:-1:2
        xx(ii)=xx(ii-1);
    end
    xx(1)=i;
     Y=[];
     t=[];
     b=CC;
    end
    
end
if xx(1)~=xx(15)
    for i=1:14
        xx(i)=xx(i+1);
    end
end
    xx(15)=[];

for m=2:14
    sum0=sum0+bb(xx(m-1),xx(m));
end
fprintf('最小值为:');
sum0
fprintf('最短路径是:');
xx

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -