物流地图【难度:2级】:
答案1:
using System;
using System. Linq;
public class Kata
{
public static int [ , ] LogisticMap ( int width, int height, int [ ] xs, int [ ] ys)
{
const int NOT_SUPPLIED = - 1 ;
var map = new int [ height, width] ;
var supplyPoints = xs. Zip ( ys, ( x, y) = > ( x, y) ) . ToArray ( ) ;
for ( int i = 0 ; i < height; i++ )
{
for ( int j = 0 ; j < width; j++ )
{
map[ i, j] = supplyPoints. Any ( )
? supplyPoints. Min ( p = > Math. Abs ( p. x - j) + Math. Abs ( p. y - i) )
: NOT_SUPPLIED;
}
}
return map;
}
}
答案2:
using System;
using System. Linq;
public class Kata {
public static int [ , ] LogisticMap ( int width, int height, int [ ] xs, int [ ] ys ) {
var map = new int [ height, width] ;
for ( int i = 0 ; i < height; i++ ) {
for ( int j = 0 ; j < width; j++ ) {
var distances =
xs. Select ( ( t, k ) = > GetDistance ( j, i, t, ys [ k ] ) ) . OrderBy ( _ = > _ ) . ToList ( ) ;
if ( distances. Count > 0 ) {
map [ i, j ] = distances [ 0 ] ;
}
else {
map [ i, j ] = - 1 ;
}
}
}
return map;
}
private static int GetDistance ( int x1, int y1, int x2, int y2 ) {
return Math. Abs ( x2 - x1 ) + Math. Abs ( y2 - y1 ) ;
}
}
答案3:
using System;
public class Kata
{
public static int [ , ] LogisticMap ( int width, int height, int