29 июл. 2015 г.

Свежие новости ленты "Почтовая" от 2015-07-29 14:10:51

Subscribe.Ru : Новости ленты "Почтовая"
Subscribe.Ru Новости ленты "Почтовая"

Свежие новости выписываемой вами ленты "Почтовая".
Для подписки, отписки и настройки параметров используйте http://subscribe.ru/member/lenta/conf


"VPF: C++"      [ наверх ]

Проход контейнера с удалением.
2015-07-29 15:14 Mechatronic


Vingrad Forum
Список на много тысяч позиций совсем не хочется копировать ...
rudolfninja, да, вы правы - при удалении последнего. Тогда вместо инкремента, просто присваиваем it = list.end(). логично?
Так, вроде, не падает.
Код

    List::iterator it = list.begin();
    for(; it != list.end();)
    {
        float delta = fabs((median - (*it).x));
        if(delta > 3 * standartDeviation)
        {
            List::iterator itToDel = it;
            if( it != (list.end() - 1))
            {
                it++;
                list.erase(itToDel);
            }else
            {
                list.erase(itToDel);
                it = list.end();
            }
        }else
        {
            it++;
        }
    }

[Qt5] Подключение dll
2015-07-29 14:45 math64


Vingrad Forum
Посмотри в настройках проекта вкладку "Настройка запуска" - значение переменной "PATH" (для Windows).
Эти настройки сохраняются в файле Project.pro.user.
Вне Qt Creator можно запускать из bat-файла, но при этом появляется консольное окно.

Найти количество островков из единиц, Код есть, не понятен
2015-07-29 14:38 Luster


Vingrad Forum
Доброе времени суток! Я новичок в программировании. Мне не понятен вот этот код. Написан он очень уж умно. А мне нужен примитивный, просто код, что бы его можно было легко читать. А этот код даже "загуглив" практически каждую строчку, требует практики, что бы его понять. Может быт, кто- нибудь смог бы его переписать более просто? на базовом уровне? 

#include <cmath>
#include <fstream>
#include <iostream>
#include <set>
#include <string>
#include <utility>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string                     T_str;
typedef std::pair   < int,  int     >   T_cell;
typedef std::set    < T_cell        >   T_cells;
/////////////////////////////////////////////////////////////////////////////////////////
void    go_to_cell_with_cells_and_visited_cells
    (
        T_cell                  cell,
        T_cells     const   &   cells,
        T_cells             &   visited_cells
    )
{
    visited_cells.insert( cell );
 
    for (
            auto
            adj_cell_it     =   cells.begin     ();
            adj_cell_it     !=  cells.end       ();
            ++adj_cell_it
        )
    {
        if  (
                    visited_cells.count( *adj_cell_it )     ==  0
 
                &&  (
                                abs( cell.first     -   adj_cell_it->first      )
                            +   abs( cell.second    -   adj_cell_it->second     )
                        ==  1
                    )
            )
        {
            go_to_cell_with_cells_and_visited_cells
                (
                    *adj_cell_it,
                    cells,
                    visited_cells
                );
        }
    }//for
}
/////////////////////////////////////////////////////////////////////////////////////////
int     get_islands_count_of( T_cells   const   &   cells )
{
    int         res_count   =   0;
    T_cells     visited_cells;
 
    for (
            auto
            cell_it     =   cells.begin     ();
            cell_it     !=  cells.end       ();
            ++cell_it
        )
    {
        if  (
                visited_cells.count( *cell_it )     ==  0
            )
        {
            ++res_count;
 
            go_to_cell_with_cells_and_visited_cells
                (
                    *cell_it,
                    cells,
                    visited_cells
                );
        }
    }//for
 
    return  res_count;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
 
    const   T_str   INPUT_FILENAME      =   "input.txt";
    const   T_str   OUTPUT_FILENAME     =   "output.txt";
 
    std::ifstream   ifile( INPUT_FILENAME );
    T_cells     cells;
 
    if( !ifile )
    {
        std::cout   <<  "Невозможно прочитать данные из файла."
                    <<  std::endl;
    }
    else
    {
        int     matr_dim    =   0;
        ifile   >>  matr_dim;
 
        for( int  i = 0; i < matr_dim; ++i )
        {
            for( int  j = 0; j < matr_dim; ++j )
            {
                int     cell_val    =   0;
                ifile   >>  cell_val;
 
                if( cell_val )
                {
                    cells.insert    (
                                        T_cell( i, j )
                                    );
                }
            }//for
        }//for
 
        std::ofstream   ofile( OUTPUT_FILENAME );
        ofile   <<  get_islands_count_of( cells );
    }//else
 
    system("pause");
}



этот код к такому заданию, только я не понял, в этом алгоритме есть обход в глубину или нету? 

Задача Острова
Каждый элемент квадратной матрицы размеренности N x N равен нулю, либо
единице. Найдите количество «островов», образованных единицами. Под «островом»
понимается группа единиц (либо одна единица), со всех сторон окруженная нулями
(или краями матрицы). Единицы относятся к одному «острову», если из одной из них
можно перейти к другой «наступая» на единицы, расположенные в соседних клетках.
Соседними являются клетки, граничащие по горизонтали или вертикали.
Уточним, что одна единица тоже считается островом. Также предлагаю считывать
матрицу из файла.
Входные данные
В первой строке файла INPUT.TXT записано натуральное число N не больше 100 -
размер квадратной матрицы. В следующих N строках задаются элементы матрицы
через пробел.
Выходные данные
В файл OUTPUT.TXT выведите единственное число - количество островов.
Пример
INPUT.TXT
4

OUTPUT.TXT
5
1 0 1 1 1
0 0 0 0 0
1 1 1 0 1
0 1 0 0 1
0 0 0 1 1

Решение задачи
Итак, это классическая задача на поиск в глубину графа. Понятно, что надо
обходить матрицу и каким-то образом вычислять количество островов. Вариант решения такой: после того, как мы попадаем на остров, надо это зафиксировать
увеличив переменную-результат на единицу. Чтобы второй раз не посчитать один и
тот же остров, сразу после посещения необходимо его уничтожить, т.е. присвоить
всем клеткам острова значение ноль.
Поскольку тест задачи не слишком мал, стоит написать процедуру уничтожения
островов, назовем ее"count". Чтобы во время выполнения процедуру не "выскочить"
за пределы массива, сделаем его не размером N x N, а размеров N+2 x N+2, это даст
нам возможность окружить искомый массив размеромN x N нулями.

Приведение массива char[] (или char* ) в LPCTSTR
2015-07-29 14:34 Cheloveck


Vingrad Forum
MultiByteToWideChar 

При этом надо конверить только если UNICODE задефайнен

Код

#ifdef  UNICODE 
    MultiByteToWideChar(...);

Комментариев нет:

Отправить комментарий

Оповещение Google – JavaScript

JavaScript Ежедневное обновление ⋅ 19 января 2025 г. НОВОСТИ Google начинает требовать Jav...