Самая первая мысль - полный перебор:
| Код | type TPoint=record x,y:integer; end; TArr = array [0..nmax-1] of TPoint; var a,b:TArr; x,y,z:TPoint; Procedure Init; begin //инициализация множеств end; Procedure Done; begin //вывод решения - точки x,y,z end; Function GetCountInside(x:TArr;a,b,c:TPoint):integer; begin //возвращает количество точек из множества x, //лежащих внутри треугольника с вершинами a,b,c end; Function Solve:boolean; var i,j,k:integer flag:boolean; begin flag:=true; i:=0; while (flag)and(i<n) do begin j:=i+1; while (flag)and(j<n) do begin k:=j+1; while (flag)and(k<n) do begin flag:=GetCountInside(a,a[i],a[j],a[k])<>GetCountInside(b,a[i],a[j],a[k]); if flag then inc(k); end; if flag then inc(j); end; if flag then inc(i); end; end; begin Init; if Solve then Done else Write('Решений нет!'); end.
|
|