Что почитать про геометрию в программировании?
Можете начать отсюда 
algolist.manual.ru/maths/geom
Конкретно по первому вопросу:
1. Перебираем все возможные тройки точек.
2. Каждая тройка - это треугольник. Для него находим центр и радиус описанной окружности (конкретно для этой подзадачи алгоритм легко выгугливается).
3. Проверяем - находятся ли все остальные точки внутри этого треугольника, и является ли эта окружность меньше, чем ранее найденные.
Подозреваю, можно сюда ещё прикрутить какие-то эвристики, чтобы отсекать явно неподходящие тройки без прогона всех вычислений - это будет актуально для большого числа точек. Но какие именно эвристики - не могу придумать.