function d = solver(map,n)
global z1432;
map = map/sum(map(:))*n;
z1366 = cell(1,8);
z1366{1} = map;
z1366{2} = map';
z1366{3} = z1152(map);
z1366{4} = z1152(map');
z1366{5} = z1846(map);
z1366{6} = z1846(map');
z1366{7} = z1846(z1366{3});
z1366{8} = z1846(z1366{4});
d = cell(1,40);
[d{:}] = deal(map);
z1620 = inf*zeros(1,40);
z1056 = 1;z1432=1;
z1658=8;
z1664 = 0;
for aaa=1
j = 0;
for i = 1:z1658
d{j+i} = z1666(z1366{i},n,z1056);
z1620(i+j) = z1263(z1366{i},d{i+j},n);
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
end
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
j = 8;
for i = 1:z1658
d{j+i} = z19142(z1366{i},n);
z1620(i+j) = z1263(z1366{i},d{i+j},n);
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
end
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
j = 16;
for i = 1:z1658
d{j+i} = z19143(z1366{i},n);
z1620(i+j) = z1263(z1366{i},d{i+j},n);
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
end
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
j = 24;
for i = 1:z1658
d{j+i} = z19144(z1366{i},n);
z1620(i+j) = z1263(z1366{i},d{i+j},n);
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
end
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
j = 32;
for i = 1:z1658
d{j+i} = z19145(z1366{i},n);
z1620(i+j) = z1263(z1366{i},d{i+j},n);
if z1620(i+j) < n/1000
r = z1620(i+j);
z1664 = i+j;
break
end
end,end
if z1664 == 0
[r z1664] = min(z1620);,end
switch mod(z1664-1,8)+1;
case 1
d = d{z1664};
case 2
d = d{z1664}';
case 3
d = z1152(d{z1664});
case 4
d = z1152(d{z1664})';
case 5
d = z1846(d{z1664});
case 6
d = z1846(d{z1664})';
case 7
d = z1152(z1846(d{z1664}));
case 8
d = z1152(z1846(d{z1664}))';,end
d = z1857(map, n, d);
function d = z1666(map,n,z1432)
s = size(map);
d = ones(s)*n;
z1031 = 1;
z1301 = z1432;
i = s(1);
z1612 = prod(s);
z1664 = 1:z1612;
z1311 = reshape(z1664,s);
z1311(:,2:2:end) = z1152(z1311(:,2:2:end));
z1311 = reshape(z1311,1,z1612);
z1343 = floor((n-1)/2);
z1618 = z1612;
for z1664 = 1:z1612,
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == z1343,
z1031 = z1031 + 1;
z1595 = z1664;
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
z1301 = z1432;
for z1664 = z1612:-1:z1595
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == n-1,
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
function d = z19142(map,n),
a = size(map,1);
b = size(map,2);
d = zeros(a,b);
z1296 = a*b;
upper = 1;
lower = a;
z1475 = 1;
z1446 = b;
z1139 = 1;
while z1139 <= z1296,
z1761 = lower-upper;
d(upper:lower,z1475) = (z1139:z1139+z1761)';
z1139 = z1139 + z1761 + 1;
z1475 = z1475 + 1;
if z1139 > z1296, break; end
z1761 = z1446-z1475;
d(lower,z1475:z1446) = (z1139:z1139+z1761);
z1139 = z1139 + z1761 + 1;
lower = lower - 1;
if z1139 > z1296, break; end
z1761 = lower-upper;
d(lower:-1:upper,z1446) = (z1139:z1139+z1761)';
z1139 = z1139 + z1761 + 1;
z1446 = z1446 - 1;
if z1139 > z1296, break; end
z1761 = z1446-z1475;
d(upper,z1446:-1:z1475) = (z1139:z1139+z1761);
z1139 = z1139 + z1761 + 1;
upper = upper + 1;
if z1139 > z1296, break; end,end
z1311 = zeros(1,z1296);
for z1664 = 1:z1296,
z1311(d(z1664)) = z1664;,end
d(:) = n;
global z1432;
z1031 = 1;
z1301 = z1432;
i = size(map,1);
z1612 = z1296;
z1343 = floor((n-1)/2);
z1618 = z1612;
for z1664 = 1:length(z1311),
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == z1343,
z1031 = z1031 + 1;
z1595 = z1664;
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
z1301 = z1432;
for z1664 = length(z1311):-1:z1595
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == n-1,
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
function d = z19143(map,n),
a = size(map,1);
b = size(map,2);
d = zeros(a,b);
z1296 = a*b;
z1139 = 1;
z1815 = 1;
z1428 = a;
z1631 = 1;
z1268 = 1;
row = 1;
col = 1;
if mod(b,2) == 0,
d(:,1) = (a:-1:1)';
z1139 = z1139 + a;
z1631 = 2;
col = 2;
row = 1;
,end
if mod(a,2) == 1,
d(1,z1631:b) = z1139:z1139+b-z1631;
z1139 = z1139+b+1-z1631;
z1268 = -1;
row = 2;
col = b;,end
while z1139 <= z1296,
while z1139 <= z1296
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row+1;
d(row,col) = z1139;
z1139 = z1139 + 1;
if (col == z1631 & z1268 == -1) | (col == b & z1268 == 1), break; end;
col = col + z1268;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row-1;
d(row,col) = z1139;
z1139 = z1139 + 1;
col = col + z1268;
end
row = row + 1;
z1268 = -z1268;,end
z1311 = zeros(1,z1296);
for z1664 = 1:z1296,
z1311(d(z1664)) = z1664;,end
d(:) = n;
global z1432;
z1031 = 1;
z1301 = z1432;
i = size(map,1);
z1612 = z1296;
z1343 = floor((n-1)/2);
z1618 = z1612;
for z1664 = 1:length(z1311),
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == z1343,
z1031 = z1031 + 1;
z1595 = z1664;
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
z1301 = z1432;
for z1664 = length(z1311):-1:z1595
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == n-1,
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
function d = z19144(map,n),
a = size(map,1);
b = size(map,2);
d = zeros(a,b);
z1296 = a*b;
z1139 = 1;
z1815 = 1;
z1428 = a;
z1631 = 1;
z1268 = 1;
row = 1;
col = 1;
if mod(b,2) == 0,
d(:,1) = (a:-1:1)';
z1139 = z1139 + a;
z1631 = 2;
col = 2;
row = 1;
,end
switch mod(a,3)
case 1,
d(1,z1631:b) = z1139:z1139+b-z1631;
z1139 = z1139+b+1-z1631;
z1268 = -1;
row = 2;
col = b;
case 2,
d(1,z1631:b) = z1139:z1139+b-z1631;
z1139 = z1139+b+1-z1631;
d(2,z1631:b) = z1139+b-z1631:-1:z1139;
z1139 = z1139+b+1-z1631;
row = 3;
col = z1631;
,end
while z1139 <= z1296,
while z1139 <= z1296
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row+1;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row+1;
d(row,col) = z1139;
z1139 = z1139 + 1;
if (col == z1631 & z1268 == -1) | (col == b & z1268 == 1), break; end;
col = col + z1268;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row-1;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row-1;
d(row,col) = z1139;
z1139 = z1139 + 1;
col = col + z1268;
end
row = row + 1;
z1268 = -z1268;,end
z1311 = zeros(1,z1296);
for z1664 = 1:z1296,
z1311(d(z1664)) = z1664;,end
d(:) = n;
global z1432;
z1031 = 1;
z1301 = z1432;
i = size(map,1);
z1612 = z1296;
z1343 = floor((n-1)/2);
z1618 = z1612;
for z1664 = 1:length(z1311),
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == z1343,
z1031 = z1031 + 1;
z1595 = z1664;
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
z1301 = z1432;
for z1664 = length(z1311):-1:z1595
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == n-1,
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
function d = z19145(map,n),
a = size(map,1);
b = size(map,2);
d = zeros(a,b);
z1296 = a*b;
z1139 = 1;
z1815 = 1;
z1428 = a;
z1631 = 1;
z1268 = 1;
row = 1;
col = 1;
if mod(b,2) == 0,
d(:,1) = (a:-1:1)';
z1139 = z1139 + a;
z1631 = 2;
col = 2;
row = 1;
,end
switch mod(a,4)
case 1,
d(1,z1631:b) = z1139:z1139+b-z1631;
z1139 = z1139+b+1-z1631;
z1268 = -1;
row = 2;
col = b;
case 2,
d(1,z1631:b) = z1139:z1139+b-z1631;
z1139 = z1139+b+1-z1631;
d(2,z1631:b) = z1139+b-z1631:-1:z1139;
z1139 = z1139+b+1-z1631;
row = 3;
col = z1631;
case 3,
d(1,z1631:b) = z1139:z1139+b-z1631;
z1139 = z1139+b+1-z1631;
d(2,z1631:b) = z1139+b-z1631:-1:z1139;
z1139 = z1139+b+1-z1631;
d(3,z1631:b) = z1139:z1139+b-z1631;
z1139 = z1139+b+1-z1631;
row = 4;
col = b;
z1268 = -1;
,end
while z1139 <= z1296,
while z1139 <= z1296
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row+1;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row+1;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row+1;
d(row,col) = z1139;
z1139 = z1139 + 1;
if (col == z1631 & z1268 == -1) | (col == b & z1268 == 1), break; end;
col = col + z1268;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row-1;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row-1;
d(row,col) = z1139;
z1139 = z1139 + 1;
row = row-1;
d(row,col) = z1139;
z1139 = z1139 + 1;
col = col + z1268;
end
row = row + 1;
z1268 = -z1268;,end
z1311 = zeros(1,z1296);
for z1664 = 1:z1296,
z1311(d(z1664)) = z1664;,end
d(:) = n;
global z1432;
z1031 = 1;
z1301 = z1432;
i = size(map,1);
z1612 = z1296;
z1343 = floor((n-1)/2);
z1618 = z1612;
for z1664 = 1:length(z1311),
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == z1343,
z1031 = z1031 + 1;
z1595 = z1664;
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
z1301 = z1432;
for z1664 = length(z1311):-1:z1595
z16642 = z1311(z1664);
if (z1301) < abs(z1301-map(z16642)) | z1618<=n-z1031 ,
if z1031 == n-1,
break;
end
z1031 = z1031 + 1;
z1301 = z1432-map(z16642);
else
z1301 = z1301 - map(z16642);
end
z1618 = z1618-1;
d(z16642) = z1031;,end
function d = z1857(map,n,d)
rand('state',7777);
z1862(n) = 0;
for i=1:n
z1862(i) = sum(sum(map(d==i)));,end
z1242 = sum(z1862) / n;
z1323 = sum(abs(z1862-z1242)) / ( n * z1242 * 2 );
if z1323 < 0.0025
return;,end
sq = 2;
z1642 = size(map,1);
z1608 = size(map,2);
nl = 1600;
pop = rand(3,nl);
z1905 = 0;
if sq >= 1
for kk=1:nl
z1596 = 2 + floor( pop(1,kk) * ( z1642-2 ) );
z1891 = 2 + floor( pop(2,kk) * ( z1608-2 ) );
z1646 = floor( pop(3,kk) * 4 + 1 );
z15962 = z1596;
z18912 = z1891;
if z1646 == 1
z15962 = z1596 + 1;
end
if z1646 == 2
z15962 = z1596 - 1;
end
if z1646 == 3
z18912 = z1891 + 1;
end
if z1646 == 4
z18912 = z1891 - 1;
end
z1433 = z1905;
if d(z15962,z18912) ~= d(z1596,z1891)
z1907 = z1862(d(z1596,z1891));
z19072 = z1862(d(z15962,z18912));
i1 = d(z1596, z1891);
i2 = d(z15962,z18912);
if z19072 > z1907
d(z15962,z18912) = d(z1596,z1891);
if ~z1194(d==i2)
d(z15962,z18912) = i2;
else
z1905 = z1905 + 1;
z1862(i2) = z1862(i2) - map(z15962,z18912);
z1862(d(z1596, z1891)) = z1862(d(z1596, z1891)) + map(z15962,z18912);
if abs(z19072-z1907) < abs( z1862(i2) - z1862(d(z1596, z1891)) )
z1905 = z1905 - 1;
d(z15962,z18912) = i2;
z1862(i2) = z19072;
z1862(d(z1596, z1891)) = z1907;
end
end
else
d(z1596,z1891) = d(z15962,z18912);
if ~z1194(d==i1)
d(z1596,z1891) = i1;
else
z1905 = z1905 + 1;
z1862(d(z15962,z18912)) = z1862(d(z15962,z18912))+ map(z1596,z1891);
z1862(i1) = z1862(i1) - map(z1596,z1891);
if abs(z19072-z1907) < abs( z1862(i1) - z1862(d(z15962, z18912)) )
z1905 = z1905 - 1;
d(z1596,z1891) = i1;
z1862(i1) = z1907;
z1862(d(z15962, z18912)) = z19072;
end
end
end
end
end
end
function tf = z1194(a)
[z1101,z1780] = find(a);
[a1,a2] = size(a);
if isempty(z1101)
tf = 0;
return,end
z1664 = 1;
while (z1664 ~= 0)
r = z1101(z1664);
c = z1780(z1664);
z1664 = z1664-1;
a(r,c) = 0;
if (r > 1) & a(r-1,c)
z1664 = z1664+1;
z1101(z1664) = r-1;
z1780(z1664) = c;
end
if (r < a1) & a(r+1,c)
z1664 = z1664+1;
z1101(z1664) = r+1;
z1780(z1664) = c;
end
if (c > 1) & a(r,c-1)
z1664 = z1664+1;
z1101(z1664) = r;
z1780(z1664) = c-1;
end
if (c < a2) & a(r,c+1)
z1664 = z1664+1;
z1101(z1664) = r;
z1780(z1664) = c+1;
end,end
tf = ~max(a(:));
function y = z1152(x)
[m,n] = size(x);
y = x(m:-1:1,:);
function y = z1846(x)
[m,n] = size(x);
y = x(:,n:-1:1);
function z1620 = z1263(ma,in,n)
z1412 = zeros(1,n);
for i = 1:numel(ma),
z1412(in(i)) = z1412(in(i)) + ma(i);
end
z1620 = sum(abs(z1412-sum(z1412)/n));
end,end
|