Este problema esta sencillo cuando usas el algoritmo correcto. En este caso yo use este.
http://en.wikipedia.org/wiki/Breadth-first_search y este
http://en.wikipedia.org/wiki/Flood_fill
Código Python:
Ver originaln = int(raw_input())
m = 2 * n - 1
matrix = [[' ' for j in range(m)] for i in range(m)]
def bfs(matrix, x, y, n):
l = [(0, 1), (1, 0), (-1, 0), (0, -1)]
q = [(x, y, n)]
matrix[x][y] = str(n)
while q:
x, y, n = q.pop(0)
if n == 1: continue
for i, j in l:
try:
if matrix[x+i][y+j] == ' ':
matrix[x+i][y+j] = str(n - 1)
q.append((x+i, y+j, n-1))
except:
continue
bfs(matrix, n-1, n-1, n)
for row in matrix:
row = ''.join(row)
print ' %s ' % (row,)
Animación
Por cierto deberías decirnos el nombre de la comunidad que pone estos retos.