Форум программистов, компьютерный форум CyberForum.ru

Найти всевозможные группы по 3,4. точки, лежащие на одной прямой - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как задать локаль для потока? http://www.cyberforum.ru/cpp-beginners/thread857098.html
Задача прочитать UTF-8 без BOM из файла в std::wstring. Однобайтные символы читаются, а кириллица нет. Если поставить Fille.imbue("ru_RU.UTF8");, или std::locale::global(std::locale("ru_RU.UTF8"));, прога аварийно завершается.
C++ Даны два массива размерности N*M и K*P. Cформировать новые одномерные массивы :cry:Очень прошу, помочь мне с задачами, никак не получаются, через несколько часов сдавать!!!! 1.Даны два массива размерности N*M и K*P. Из элементов не превыщающих пяти первого массива и эл не превашающих р второго массива сформировать новые одномерные массивы. Буду очень вам благодарна!!!! http://www.cyberforum.ru/cpp-beginners/thread857088.html
Связной список и сортировка C++
Помогите написать прогу: Реализующую связный список с информацией о сотрудниках и отображающую список в порядке возрастания возраста сотрудника В виду Фамилия Имя Отчество Возраст
Сумма цифр заданного числа N C++
Добрый день ! Помогите написать программу , вычисляющую сумму цифр заданного числа N. Рекурсивным и не рекурсивным способом. Заранее огромное спасибо !!!
C++ Esc как символ конца ввода http://www.cyberforum.ru/cpp-beginners/thread857046.html
Доброго времени суток. Есть такой вопрос. Как мне закончить ввод при нажатии esc. Например, если пользователь вводит некий текст (через cin например) и нажимает enter, то ввод заканчивается и этот текст идет дальше по функции, но если он нажал esc, то должен произойти выход из этой функции. Надеюсь мысль ясна, заранее спасибо.
C++ Количество символов в текстовом файле Доброго почти утра вам=) Такой вопрос, можно ли определить длину текстового файла? Файл открыл через fopen, а теперь нужно присвоить переменной количество символов в этом файле. Чем воспользоваться?=)) подробнее

Показать сообщение отдельно
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
06.05.2013, 14:11     Найти всевозможные группы по 3,4. точки, лежащие на одной прямой
Вот такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <set>
#include <vector>
#include <algorithm>
#include <functional>
#include <fstream>
#include <iostream>
 
using namespace std;
using namespace std::placeholders;
 
typedef pair<int, int>         point_t;
typedef set<point_t>           points_t;
typedef pair<point_t, point_t> line_t;
typedef vector<line_t>         lines_t;
typedef vector<points_t>       groups_t;
 
bool point_on_line(const point_t & p, const line_t & l)
{
    int dx = l.second.first - l.first.first;
    int dy = l.second.second - l.first.second;
    int x0 = l.first.first;
    int y0 = l.first.second;
    return -dy*(p.first - x0) + dx*(p.second - y0) == 0;
}
 
bool same_line(const line_t & l0, const line_t & l1)
{
    // compute line directions
    int dx0 = l0.second.first - l0.first.first;
    int dx1 = l1.second.first - l1.first.first;
    int dy0 = l0.second.second - l0.first.second;
    int dy1 = l1.second.second - l1.first.second;
    // compare directions
    if (dx0*dy1 - dy0*dx1 != 0)
        return false;
    // check if first point of l0 is on l1
    return point_on_line(l0.first, l1);
}
 
int main()
{
    // read points from file
    ifstream inp("input.txt");
    int n;
    inp >> n;
    points_t pts;
    while (n--) {
        int x, y;
        inp >> x >> y;
        pts.insert(point_t(x, y));
    }
 
    // unique lines
    lines_t ls;
 
    // groups of points on the same line
    groups_t gs;
 
    // consider all pairs of points
    for (auto p0 = pts.begin(); p0 != pts.end(); ++p0) {
        for (auto p1 = p0; ++p1 != pts.end();) {
            // check if line for pair of points was already considered
            line_t l(*p0, *p1);
            auto it = find_if(ls.begin(), ls.end(), bind(same_line, l, _1));
            if (it != ls.end())
                continue;
            ls.push_back(l);
            // compute all points on the line
            points_t g = { *p0, *p1 };
            for (auto p2 = p1; ++p2 != pts.end();) {
                if (point_on_line(*p2, l))
                    g.insert(*p2);
            }
            if (g.size() > 2)
                gs.push_back(g);
        }
    }
 
    // print groups of points
    for (size_t i = 0; i < gs.size(); ++i) {
        cout << i << ":";
        for (auto p : gs[i]) {
            cout << " (" << p.first << "," << p.second << ")";
        }
        cout << endl;
    }
}
Цитата Сообщение от input.txt
8
0 0
5 7
1 1
6 7
2 5
10 10
0 7
9 7
Цитата Сообщение от stdout
0: (0,0) (1,1) (10,10)
1: (0,7) (5,7) (6,7) (9,7)
 
Текущее время: 16:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru