%交叉
function y=crossover(prob,x)
%{
rowx=length(x(:,1));
widx=length(x(1,:));
randnum=rand(1);
if randnum<prob
a=randsrc(1,2,1:rowx);
b=randsrc(1,2,1:31-1);
if b(1)==b(2)
b(2)=b(2)+1;
end
if b(1)>b(2)
bb=b(1);
b(1)=b(2);
b(2)=bb;
end
for i=b(1):b(2)
c=x(a(1),i);
x(a(1),i)=x(a(2),i);
x(a(2),i)=c;
end
for i=b(1):b(2)
for j=1:b(1)-1
if x(a(1),i)==x(a(1),j)
x(a(1),j)=x(a(2),i);
end
end
for j=b(2)+1:widx
if x(a(1),i)==x(a(1),j)
x(a(1),j)=x(a(2),i);
end
end
end
for i=b(1):b(2)
for j=1:b(1)-1
if x(a(2),i)==x(a(2),j)
x(a(2),j)=x(a(1),i);
end
end
for j=b(2)+1:widx
if x(a(2),i)==x(a(2),j)
x(a(2),j)=x(a(1),i);
end
end
end
y=x;
else
y=x;
end
end
%}
rowx=length(x(:,1));
widx=length(x(1,:));
randnum=rand(1);
if randnum<prob
a=randsrc(1,2,1:rowx);
b=randsrc(1,1,1:31);
cc=x(a(1),b);
x(a(1),b)=x(a(2),b);
x(a(2),b)=cc;
for i=1:length(x(a(1),:))
if i~=b && x(a(1),i)==x(a(1),b)
x(a(1),i)=x(a(2),b);
end
end
for i=1:length(x(a(2),:))
if i~=b && x(a(2),i)==x(a(2),b)
x(a(2),i)=x(a(1),b);
end
end
y=x;
else
y=x;
end
end