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

Найти соседей в массиве C++ - C++

Восстановить пароль Регистрация
 
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
20.08.2012, 16:27     Найти соседей в массиве C++ #1
Есть мини-игра :
1. Шарики расположены по определенным позициям.
2. Кликаешь берет шарик в руки а все остальные шарики отодвигаются в сторону где взял шарик(как в игре Zuma).
3. Потом ложишь обратно (типа меняешь им позиции) тогда отодвигаются по сторонам освободив место шарику.

Вопрос : Каким методом это реализовать ? нужно найти соседей в массиве или как? подскажите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2012, 16:27     Найти соседей в массиве C++
Посмотрите здесь:

C++ Среди N введённых целых чисел найти количество соседей разных знаков.
Найти сумму элементов массива, которые больше своих "соседей" справа и слева C++
Найти число элементов массива, которые больше своих “соседей” C++
C++ Найти и удалить в списке элементы, равные сумме своих соседей.
Среди N введенных чисел найти количество соседей разных знаков C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
20.08.2012, 16:57     Найти соседей в массиве C++ #2
отслеживай положение относительно массива(набор позиций шарика-вставки). и все.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
20.08.2012, 17:46     Найти соседей в массиве C++ #3
std::vector, методы erase/insert
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.08.2012, 17:53     Найти соседей в массиве C++ #4
std::list, у него эффективнее реализована вставка-выемка из произвольного места.

Не по теме:

И класть, а не ложить.

I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
20.08.2012, 18:03     Найти соседей в массиве C++ #5
Так-то да, но кто знает, как у автора реализована функция "взять шарик в руки". Может он индекс шарика передает. Тогда лучше вектор. Или переделать все под лист.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
20.08.2012, 19:37     Найти соседей в массиве C++ #6
та пусть сам реализует list или vector
так веселее и нам и ТС
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
21.08.2012, 03:13  [ТС]     Найти соседей в массиве C++ #7
пример кода бы
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.08.2012, 03:27     Найти соседей в массиве C++ #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ball* get(std::vector<ball*>& data, int index)
{
    auto it = std::next(data.begin(), index);
    ball* temp = *it;
    data.erase(it);
    return temp;
}
 
void set(std::vector<ball*>& data, int index, ball* new_ball)
{
    auto it = std::next(data.begin(), index);
    data.insert(it, new_ball);
    return;
}
никакой проверки на корректность входных параметров нет. А надо бы.
Функция get вытаскивает шарик с номером index, а функция set ставит шарик new_ball на место с номером index.
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
21.08.2012, 04:19  [ТС]     Найти соседей в массиве C++ #9
а что такое std::next? у меня визуал не понимает.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.08.2012, 04:41     Найти соседей в массиве C++ #10
тогда пишите просто
C++
1
auto it = data.begin()+index;
если auto тоже не понимает, то тогда так:
C++
1
std::vector<ball*>::iterator it = data.begin()+index;
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
21.08.2012, 06:23  [ТС]     Найти соседей в массиве C++ #11
после удаления как отсортировать массив чтоб взяли первый элемент из массива тогда второй элемент берет значение первого и так далее?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
21.08.2012, 08:46     Найти соседей в массиве C++ #12
Не понял. А с последним элементом тогда что происходит? Его значение пропадает вовсе что ли? Т.е. было
13, 42, 7, 2, 99
берем первый элемент - 13
стало
13, 42, 7, 2
так что ли?
roonet_
0 / 0 / 0
Регистрация: 07.12.2010
Сообщений: 27
21.08.2012, 09:55  [ТС]     Найти соседей в массиве C++ #13
вот допустим массив из 9 чисел
array[9] = {1,2,3,4,5,6,7,8,9};
берем arr[5];
тогда четвертый элемент присваивает значение пятого и так далее arr[4] = 5; arr[6] = 5; типа так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2012, 10:25     Найти соседей в массиве C++
Еще ссылки по теме:

В целочисленном массиве найти наибольший элемент среди элементов меньше своих соседей C++
C++ В двухмерном массиве найти максимальный и минимальный элементы и их координаты в массиве
C++ Среди N введённых целых чисел найти количество соседей разных знаков

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 10:25     Найти соседей в массиве C++ #14
Вот реализация того что я понял - объединения в группы одинаковых шаров изначально забитых в рандомном порядке
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
#include <ctime>
#include <vector>
#include <iostream>
//#include <algorithm>//если юзаем sort
using namespace std;
 
void randFill(vector<int> &vec, int n);
void showBall(vector<int>  vec);
void sortBall(vector<int>  &vec);
 
int main()
{
    srand(time(0));
    vector<int> vec;
    randFill(vec, 20);//Пусть 20 шаров 
    showBall(vec);
    sortBall(vec);
    //а можно было вместо sortBall
    //sort(vec.begin(),vec.end());
    showBall(vec);
    return 0;
}
 
void randFill(vector<int> &vec, int n)
{
    for(int i = 0; i < n; i++)
        vec.push_back(rand()%3);
}
 
void showBall(vector<int>  vec)
{
    //0 означает красный 
    //1 зелёный
    //2 голубой
    vector<int>::iterator i;
    for(i = vec.begin(); i < vec.end(); i++)
    {
        switch((*i))
        {
        case 0:
            cout<<"[r]";
            break;
        case 1:
            cout<<"[g]";
            break;
        case 2:
            cout<<"[b]";
            break;
        }
    }
    cout<<endl;
}
 
void sortBall(vector<int>  &vec)
{
    vector<int>::iterator i;
    vector<int>::iterator j;
    int buf;
    for(i = vec.begin(); i < vec.end(); i++)
    for(j = i + 1      ; j < vec.end(); j++)
    {
        if((*j) < (*i))
        {
            buf = (*j);
            vec.erase(j);
            vec.insert(j,(*i));
            vec.erase(i);
            vec.insert(i,buf);
            //а можно было всё просто
            //swap((*i),(*j));
        }
    }
}
http://liveworkspace.org/code/e3f697...2b0c37a32307dc
[g][r][r][r][g][g][g][b][r][b][b][r][g][r][g][r][g][r][b][r]
[r][r][r][r][r][r][r][r][r][g][g][g][g][g][g][g][b][b][b][b]
Миниатюры
Найти соседей в массиве C++  
Yandex
Объявления
21.08.2012, 10:25     Найти соседей в массиве C++
Ответ Создать тему
Опции темы

Текущее время: 08:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru