📄
字号:
zerocolummum=1;
for times=1:2
times
conflicttag=0;
temp1=1;
for j=1:size
for i=1:N
if schedul(i,j)==0
delet(temp1)=j; %存放可能可以合并的调度向量
temp1=temp1+1;
break;
end
end
end
temp1=temp1-1; %temp1存放可能可以合并的列的个数
for k=1:temp1-1 %进行合并
if delet(k)~=0
j1=delet(k);
for j=k+1:temp1
if delet(j)~=0
j2=delet(j);
combinetag=1; %标记combinetag=1可以合并,=0不能合并
for i=1:N
if schedul(i,j1)&schedul(i,j2)
combinetag=0;
break;
end
end
if combinetag==1 %可能可以合并,但不知道是否有冲突,下面需要判断
i=0;
for t=1:N
if schedul(t,j1)==0
i=i+1;
else
break;
end
end
if i~=N
i=0;
for t=1:N
if schedul(t,j2)==0
i=i+1;
end
end
if i~=N
for t=1:N
temp3(t)=schedul(t,j1)+schedul(t,j2);
end
conflicttag=0;
for t=1:N-1 %检查合并后是否有冲突,即是否有多个端口向同一个端口发送数据
for m=t+1:N
if temp3(t)==temp3(m)&temp3(t)~=0
conflicttag=1;
break; %有冲突conflicttag=1则跳出
end
end
if conflicttag==1
break;
end
end
else
conflicttag=1;
end
else
conflicttag=1;
end
if conflicttag==0 %没有冲突conflicttag=0则合并
fprintf('可以合并的列是');j1,j2
for t=1:N
schedul(t,j1)=temp3(t);
schedul(t,j2)=0;
end
fprintf('合并一次后的两个列向量如下'); schedul(:,j1),schedul(:,j2)
delet(j)=0;
zerocolum(zerocolummum)=j2;
zerocolummum=zerocolummum+1;
fprintf('合并一次后的调度表:');
schedul
temp1=temp1-1;
temp=temp+1; %记录删除的向量的个数
end %if conflicttag==0
end %if combinetag==1
end
end
end
end
end%%%for times
zerocolummum=zerocolummum-1;
for j=1:zerocolummum-1
for i=1:zerocolummum-j
if zerocolum(i)>zerocolum(i+1)
temp1=zerocolum(i);
zerocolum(i)=zerocolum(i+1);
zerocolum(i+1)=temp1;
end
end
end
schedul
for k=1:zerocolummum
for i=1:N
if zerocolum(k)+1<=size
for j=zerocolum(k)+1:size
schedul(i,j-1)=schedul(i,j);
end
end
schedul(i,j)=0;
end
for i=k:zerocolummum
zerocolum(i)=zerocolum(i)-1;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -