Algoritmo para cobrir o número máximo de pontos com um círculo de raio determinado

Vamos imaginar que temos um avião com alguns pontos nele. Também temos um círculo de raio determinado.

Eu preciso de um algoritmo que determine tal posição do círculo que cubra o maior número possível de pontos. Obviamente, existem muitas dessas posições, portanto o algoritmo deve retornar uma delas.
A precisão não é importante e o algoritmo pode cometer pequenos erros.

Aqui está um exemplo de imagem:

Entrada:
&nbsp;&nbsp;int n&nbsp;(n <= 50) - número de pontos;
&nbsp;&nbsp;float x[n]&nbsp;efloat y[n]&nbsp;- matrizes com as coordenadas X e Y dos pontos;
&nbsp;&nbsp;float r&nbsp;- raio do círculo.


Resultado:
&nbsp;&nbsp;float cx&nbsp;efloat cy&nbsp;- coordenadas do centro do círculo

A velocidade da luz do algoritmo não é necessária, mas não deve ser muito lenta (porque conheço algumas soluções lentas para essa situação).

O código C ++ é preferido, mas não obrigatório.