matlabcody Problem 173. Minefield Sonar

自己写的…

%初始化
M = 9;N = 9;%创建 9x9 矩阵
I = [ 2 3 3 5 1 4 9 2 3 9 ];J = [ 1 1 4 4 5 5 6 8 8 9 ];%-1 的坐标
[p,o] = size(I); leni = p*o;
x = zeros(M,N);
l = 1;
%创建矩阵,把 -1 放进去
for s = 1:leni
    S = I(s);
    L = J(l);
x(S,L) = -1;
l = l+1;
end

%检测 -1 点的坐标,是否在两边,是则跳过
%不是,再判断周围(h,g)代入有无负一,有,跳过,无,周围加一。
   for i = 1:leni
    j = I(i);
    k = J(i);%负一所在的坐标
    sd = 0;
    for h = j-1:j+1
           for g = k-1:k+1
              sm =  (  ((0<h)&(h<M+1)) &&  ((0<g)&(g<N+1))   );%判断在两边
               if (sm)
                 sd =  (not ( (x(h,g) == -1)) ); %任意值等于负一跳过
                 if (sd)
                x(h,g) = x(h,g) + 1;
                 %g
                % h
                 end
               end
            end
     end
   end
      x

大佬写的…

I = [ 2 3 3 5 1 4 9 2 3 9 ];
J = [ 1 1 4 4 5 5 6 8 8 9 ];
M = 9; N = 9;
map = zeros(M, N)
    map(sub2ind([M N], I, J)) = 1
    y = conv2(map, ones(3), 'same')
    y(map==1) = -1

你可能感兴趣的:(matlab,matlab)