Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/20: Рейтинг темы: голосов - 20, средняя оценка - 4.90
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010

LIFO == TimeShift

18.04.2010, 13:30. Показов 4606. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане...
Не большая предыстория возникновения идеи этого поста:

Я много уже перерешал различных задач про матрицы, и все они казались
тривиальными и неитересными, и мне в голову пришла такая мысль,
а не придумать бы интересную и нелёгкую задачу про матрицу, за одно
и форуму будет польза от наличия на нём интересных и нетривиальных задач.

Эта задача не из учебников, я её сам придумал,
если и есть где такая задача, то это случайное совпадение.

LIFO == Time Shift by Genius Ignat(c).
Копирайт по традиции, но в реальной жизни он не спасает, воров идей хватает везде.

Вообщем эта задача уже решена,
но я хотел бы, что бы вы попытались решить её тоже, эта задача интересна и полезна
(в большей степени не желе тривиальные задачи: более полезна в практической деят),
ответ я выложу, после того как ваши идеи и ответы закончатся,
или пост перестанет быть актуальным.


Решение задачи поощряется Mx
повышением вашей репутации, я отправлю вам отзывы.
Mx - если задача решена полностью. Mx - это значит, я вам отправлю два отзыва.
Nx - если задача решена частично. Nx - это значит, я вам отправлю один отзыв.
Mx это : в среднем + 160 - 180 к вашей репутации.
Nx это : в среднем + 80 - 90 к вашей репутации.
Совет: программу старайтесь делать качественнее, с комментами и тд.

Надеюсь, я и на вашу щедрость, возможно, кому то пригодиться мое решение,
1 день угробил на всю эту задачу:
Не весь день конечно с 13:00 до 21:00, всё ради того,
что бы код был как можно качественнее и понятнее, если есть ошибки
в комментариях моей программы,
прощу прощения, среда разработки не поддерживает анализа текста на ошибки.


Задача:
//------------------------------------------------------------------------------------
Примечание:
Интересная нетривиальная задача с матрицей фиксированного размера: от Genius Ignat(c).
такая задача может пригодиться в практике,
потому как матрицы в программах бывают фиксированного размера, + ещё фиксированного содержания.
Задача, скорее всего, имеет только одно оптимальное решения, может и ошибаюсь,
я не математик, что такое вычислять.
//------------------------------------------------------------------------------------
Дана матрица:
H - высота == 5
W - ширина == 5
В матрице находиться равнопроцентное содержание следующих значений: 1,2,3,4,5;
Матрица имеет вид:
{1,2,5,4,3}
{2,1,1,5,4}
{1,1,2,5,3} (т.1)
{2,2,5,4,3}
{5,4,4,3,3}
Что надо сделать:
Сделать надо следующее: в каждой строке должны быть собраны соответствующие
значения: матрица должна принять более рациональный вид: ряды по возрастанию:
{1,1,1,1,1}
{2,2,2,2,2} (т.2)
{3,3,3,3,3}
{4,4,4,4,4}
{5,5,5,5,5}


Для получения Nx репутации, нужно придумать алгоритм, который сделает,
то что сказано выше.
Для получения Mx репутации, задача усложняется следующим:

Алгоритм, который превращает матрицу, должен предусматривать ещё
способ как можно восстановить прежнее положение элементов матрицы(т.1),
для реализации нужно задействовать принцип LIFO: должен использоваться
стек позволяющий вернуть матрицу в первоначальное состояние.

Предназначение стека: надеюсь, вам не надо объяснять, для чего он нужен. ~ сами должны сообразить что в нём должно храниться.
Подсказка: Вспомните игру шахматы, и принцип, пошагового возврата всех фигур на свои места. по принципу LIFO, и тогда будет понятно что должен хранить стек.
//--------

//--------
Примечание:
вам не требуется писать алгоритм проверяющий
равнопроцентая ли матрица, или нет, решаем частный предложенный случай,
а кто сможет(и хочет) пусть сделает наиболее обший случай решения данной задачи.

//------------------------------------------------------------
Ограничения:
Нельзя использовать STL и другие библиотечные примочки, всё надо делать ручками:
Даже стек ручками надо сделать.
Стек разрешается делать в виде класса с инкапсулированным узлом стека, либо по старинке как на добром C с функциями и описанным в глобальной области узлом стека.
//------------------------------------------------------------
Это я не проверю: гугл не используйте, это на вашей совести.
//------------------------------------------------------------

Подсказать exe-ком своей программы не могу, мне ни кто не подсказывал,
по работе моей программы можно понять принцип работы алгоритма.


Решение желательно что бы нормально компилировалось. в VS 2008 или VC++ 6.0.
Кто имеет лишнее время и желание делать, что-то интересное, попытайтесь
решить, пожалуйста.
Желаю всем, кто будет пробовать решить, удачи.

Просьба к модераторам, когда я выложу ответ, закроёте эту тему, пожалуйста,
дабы ни кто, не оффтопил, и был какой то итог моей темы.

Просьба к пользователям, не оффтопить в теме говорить по делу, не кидать понты типа:
на кой это мне решать, не хотите не решайте, не можете не решайте,
не спрашивать: “а сколько я получу репутации за решение”,
надо будет, я вам и три раза нажну отзыв,
если решение будет наиболее качественно и воспринимаемо для чтения.
4
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2010, 13:30
Ответы с готовыми решениями:

Не запускается TimeShift
Игра не запускаеться, пишет типо какие особые параметры нужны, Windows 7

Flussonic timeshift
Всем привет. При разработке IPTV столкнулся с реализацией абсолютного таймшифта на базе flussonic. Получаю ссылку на файл .m3u8,...

Timeshift не запускается с лицензионным диском
пишет вставьте лицензионный диск а он у меня лицензионный я уже играл с него дело наверняка не в диске потомучто 2 игры не запускаются fear...

31
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
19.04.2010, 22:44
Студворк — интернет-сервис помощи студентам
Genius Ignat, кстати, было бы не плохо подсчитать время выполнения для каждого из алгоритмов для матрицы размером, скажем, 50 на 50 в качестве итогов написанному.
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
21.04.2010, 15:36
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Genius Ignat Посмотреть сообщение
В матрице находиться равнопроцентное содержание следующих значений: 1,2,3,4,5;
Матрица имеет вид:
{1,2,5,4,3}
{2,1,1,5,4}
{1,1,2,5,3} (т.1)
{2,2,5,4,3}
{5,4,4,3,3}
Что надо сделать:
Сделать надо следующее: в каждой строке должны быть собраны соответствующие
значения: матрица должна принять более рациональный вид: ряды по возрастанию:
{1,1,1,1,1}
{2,2,2,2,2} (т.2)
{3,3,3,3,3}
{4,4,4,4,4}
{5,5,5,5,5}
Genius Ignat,
я сделал следующее -> while ( b[t - 1][c] ) c++
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
#include <iostream>
 
int main()//========================================================= 
{
    const size_t N = 5;
    size_t a[N][N] = {
                      {1,2,5,4,3},
                      {2,1,1,5,4},
                      {1,1,2,5,3},
                      {2,2,5,4,3},
                      {5,4,4,3,3},
                     };
 
    for ( size_t i = 0; i < N; ++i, std::endl(std::cout) )
    for ( size_t j = 0; j < N; ++j )
        std::cout << a[i][j] << std::ends;
 
    std::endl(std::cout);
    //----------------------------------------------------    
 
    size_t **b = new size_t*[N];
    for ( size_t i = 0; i < N; i++ )
    {
        b[i] = new size_t[N];
        memset(b[i], 0, N*sizeof(b[i]) );
    }
    //----------------------------------------------------
 
    for ( size_t i = 0; i < N; ++i )
    for ( size_t j = 0; j < N; ++j )
    {
        size_t t = a[i][j]; 
        size_t c = 0;
 
        while ( b[t - 1][c] )
            c++;
        //----------------
        b[t - 1][ c ] = t; 
        //----------------      
    }
    //----------------------------------------------------
 
    for ( size_t i = 0; i < N; ++i, std::endl(std::cout) )
    for ( size_t j = 0; j < N; ++j )
    {
        std::cout << b[i][j] << std::ends; 
    }
    //----------------------------------------------------
 
    for ( size_t i = 0; i < N; i++ )
        delete [] b[i];
    delete [] b;
 
    return 0;
}//==================================================================
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
21.04.2010, 19:05  [ТС]
Ладно: всё короче выкладываю свое решение, даю более информативную и емкую программу:


Мой ответ: вариант решения

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
//The source code and comment by Genius Ignat©
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
#include <iostream>       //Экран клавиатура: U I/0
#include <fstream>        //Файлы: U I/0
using namespace std;
//Основной код:
//----------------------------------------------------------------------------------------------------------------------
const long UNKNOWN_VALUE = -10; //некое значение.
const long ERROR_INDEX = -30;   //неверный индекс.
const long STACK_EMPTY = -20;   //стек пуст.
const long EQUAL_IND = -2;      //переданны одинаковые индексы.
const long NOT_RAT_MATRIX = -3; //передана не равнопроцентная матрица.
const long H = 5;               //высота матрицы.
const long W = 5;               //ширина матрицы.
const long M_ERROR = -1;         //ошибка.
const long M_OK = 0;             //всё ok.
 
/*
Массив ключей от рядов можно настроить и на другую матрицу, имеющию стандартную 
равнопроцентную структуру.
*/
//Массив ключей от рядов.
const int RAD_KEYS[] = {1,2,3,4,5};  //правильный ключ от каждого ряда.
typedef int RAT_MATRIX[H][W];        //тип матрицы.
 
/*
Набор пройденных тестов для функции transform без суффикса_2:
//----------------------------
(1)
  
    {1,2,5,4,3}
    {2,1,1,5,4}
    {1,1,2,5,3}
    {2,2,5,4,3}
    {5,4,4,3,3}
 
при: H == 5
     W == 5
 
swaps: 17
 
const int RAD_KEYS[] = {1,2,3,4,5}; 
 
//-----------------------------
(2) 
   
    {1,2,3,4,3}
    {2,1,1,3,4}
    {1,1,2,4,3}
    {2,2,4,4,3}
 
при: H == 4
     W == 5
 
swaps: 12
const int RAD_KEYS[] = {1,2,3,4}
 
Предупреждение:
Совместно алгоритм transform и transofrm_2 будут работать только на квадратных матрицах.
Если посмотреть на свойстdо равнопроцентной матрицы можно понять почему только для квадратных.
//------------------------------------------
 
(3)
    {3,3,3,4}
    {2,1,1,5}
    {1,1,2,5}
    {2,2,5,4}
    {5,4,4,3}
 
при H == 5
    W == 4 
swaps: 13
const int RAD_KEYS[] = {1,2,3,4,5};
//------------------------------------------
 
(4) 
    {1,2,3}
    {3,2,1}
    {2,1,3}
 
при H == 3
    W == 3
swaps: 5
const int RAD_KEYS[] = {1,2,3};
меньше 3x3 вообще не вижу смысла
//------------------------------------------
(5)
 
 {1,4,4,4,4,4,5,7,8,8}
 {2,2,1,1,3,3,5,7,8,8}
 {2,2,2,1,1,2,5,7,9,9}
 {4,4,4,4,4,6,7,8,9,9}
 {1,1,2,2,5,6,7,8,9,10}
 {3,3,3,3,5,6,7,8,9,10}
 {5,5,5,5,5,6,7,9,10,10}
 {2,6,6,6,6,7,8,9,10,10}
 {3,3,3,3,6,7,8,9,10,10}
 {1,1,1,2,6,7,8,9,10,10}
 
при H == 10
    W == 10
swaps: 79.
const int RAD_KEYS[] = {1,2,3,4,5,6,7,8,9,10};
 
Больше не проверял задолбался заполнять 10x10.
//---------------------------------------------
*/
/*
 
Некоторые  закономерные особенности моего алгоритма.
Количество обменов при трансформации не может быть больше чем H*W - размера самой матрицы:
Как бы не располагались элементы, обменов все равно не может быть больше H*W,
потому как алгоритм на каждом исследуемом шаге может сделать один обмен или неодного.
Мой алгоритм не делает многократных замен, в этом нет необходимости, это не сортировка.
 
Обнаружить не равно-процентную матрицу алгоритм может в процессе своего исполнения:
   во время трансформации, если матрица не равно-процентная будет возврат, 
   элементы поменяют свои места на другие, 
   потому как неправильная матрица обнаруживается во время исполнения transf. 
   Прежнее состояние можно вернуть стеком c помощью Restore.
*/
 
 
//----------------------------------------------------------------------------------------------------------------
//Структура точки матрицы
struct Point {
int x;  //позиция по x
int y;  //позиция по y
Point(): x(0),y(0){}     //инициализация по умолчанию.
Point(int v_x,int v_y):x(v_x),y(v_y){}
//действительна ли точка в системе координат([0].[0]).
inline bool point_valid(){ if(x<0||y<0)return false; return true; }  
};
 
 
static int SIZE_STACK = 0; //размер стека, переменная глобальная если используется один стек, она хранит верное знач
//----------------------------------------------------------------------------------------------------------------
//Описание узла стека.
struct Node  {
Node *next;   //для связи с узлом.
Point obj;    //Освновные данные узла стека.
};
 
 
//----------------------------------------------------------------------------------------------------------------
//Операции со стеком.
void push(Node **const top, int x , int y);            //положить в стек.
Point pop(Node **const top);                           //Извлечь из стека. 
 
//отчистить весь стек.
void Update(Node **const top){ while(*top)pop(top);  }
inline int  Get_Size(){ return SIZE_STACK; }                                  //размер стека.
inline bool isEmpty(Node *top){if(top!=NULL)return 0; else return 1;}        //проверка указателя.
 
//-----------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------
//Функции для работы с равнопроцентной матрицей.
//------------------------------------------------------
long m_print(RAT_MATRIX matrix, const int h , const int w);                   //вывод матрицы.
long m_input(RAT_MATRIX matrix, const int h , const int w);                   //ввод матрицы.
//------------------------------------------------------
long m_save(RAT_MATRIX matrix, const int h , const int w, const char *path);    //вывод матрицы. в файл.
long m_load(RAT_MATRIX matrix, const int h , const int w, const char *path);    //чтение матрицы из файла.
//------------------------------------------------------
long m_transform(RAT_MATRIX matrix, const int h , const int w);//упорядочивание рядов(1)
long m_transform(RAT_MATRIX matrix, const int h , const int w, Node **const top); //упорядочивание рядов(2)
long m_Restore(RAT_MATRIX matrix, const int h , const int  w, Node **const top);  //восстановить прежнее состояние рядов.
 
/*m_Restore можно применять не только для данной задачи, полный возврат назад, может
потребовать и в других похожих задачах.
*/
//Если работать со столбцами: не относится к поставленной задачи: Improvisation
long m_transform_2(RAT_MATRIX matrix, const int h , const int w);//упорядочивание рядов(1.1)
long m_transform_2(RAT_MATRIX matrix, const int h , const int w, Node **const top); //упорядочивание рядов(2.2)
 
 
/*
В функциях transform и Restore эти функции не используются, хотя могли бы я их написал позже, 
и вставлять нехочеться.
*/
//TimeShift swap. обмен под контролем  LIFO.
long T_swap(RAT_MATRIX matrix, int x_1, int y_1, int x_2, int y_2, const int h, const int w, Node **const top); //TimeShift swap.
long T_undo(RAT_MATRIX matrix, Node **const top); //отмена при помощи LIFO TimeShift
//-----------------------------------------------------------------------------------------------------------------
 
/*
Если всё прошло успешно  transform вернёт количество обменов.
Если функция transform вернула NOT_RAT_MATRIX, значит матрица не правильная, матрица даже после возрата
такого сообщения может измениться, то есть исходное расположение элементов измениться
с помощью стека матрицу можно будет возвратить обратно.
*/
 
 
//main:
int main(){
Node *top = NULL;  //всегда ссылается на вершину это указатель так сказать ресурс для функций вида **.
//матрица:
/* Та что в задании:
    {1,2,5,4,3}
    {2,1,1,5,4}
    {1,1,2,5,3}
    {2,2,5,4,3}
    {5,4,4,3,3}
*/
 
RAT_MATRIX matrix = {
    {1,2,5,4,3},
    {2,1,1,5,4},
    {1,1,2,5,3},
    {2,2,5,4,3},
    {5,4,4,3,3}
 
};
 
//-----------------------------------------------------------------
m_print(matrix,H,W);          //выводим матрицу. 
{
int count = m_transform(matrix,H,W,&top); //трансформируем матрицу в соответстиии с задачей, путь восстановления будет в стеке.
if(count==NOT_RAT_MATRIX)cout<<"error type matrix\n\n";
else cout<<"count swaps trans: "<<count<<endl<<endl;
 
cout<<"Stack_Size:  "<<Get_Size()<<endl<<endl;
//------------------------------------------
m_print(matrix,H,W);          //выводим изменённую матрицу.
int count_2 = m_Restore(matrix,H,W,&top);   //восстанавливаем исходную матрицу.
cout<<"count swaps ret: "<<count_2<<endl<<endl;
m_print(matrix,H,W);          //выводим исходную матррицу на экран.
}
 
//-----------------------------------------------------------------
//Можно откомметировать, если надо.
#if 0
{
int count = m_transform_2(matrix,H,W,&top); //трансформируем матрицу в соответстиии с задачей, путь восстановления будет в стеке.
if(count==NOT_RAT_MATRIX)cout<<"error type matrix\n\n";
else cout<<"count swaps trans: "<<count<<endl<<endl;
cout<<"Stack_Size:  "<<Get_Size()<<endl<<endl;
m_print(matrix,H,W);          //выводим изменённую матрицу.
int count_2 = m_Restore(matrix,H,W,&top);   //восстанавливаем исходную матрицу.
cout<<"count swaps ret: "<<count_2<<endl<<endl;
m_print(matrix,H,W);                        //выводим исходную матррицу на экран.
}
#endif
 
//-----------------------------------------------------------------
cout<<"Stack_Size:  "<<Get_Size()<<endl<<endl;
//Можно откомметировать, если надо.
#if 0
T_swap(matrix,0,1,3,2,H,W,&top);
m_print(matrix,H,W);          //выводим матрицу.
T_swap(matrix,0,1,0,3,H,W,&top);
m_print(matrix,H,W);          //выводим матрицу.
T_undo(matrix,&top);
m_print(matrix,H,W);          //выводим матрицу.
T_undo(matrix,&top);
m_print(matrix,H,W);          //выводим матрицу.
#endif 
Update(&top);
system("pause");
return 0;
}
 
//----------------------------------------------------------------------------------------------------------------
//Реализация функций стека.
void push(Node **const top, int x , int y){ 
//Если стек опустел или не создан.
if(*top==NULL){
Node * pv = new Node;  //создаём узел.
//Инициализируем поля стуктуры.       
pv->obj.x = x;          
pv->obj.y = y;
pv->next = NULL;       //признак дна стека.
(*top)=pv;             //записываем адрес созданного узла в указатель вершины стека.
SIZE_STACK++;
return ;
}
else  {  
Node * pv = new Node;  //создаём узел.
//Инициализируем поля стуктуры.       
pv->obj.x = x;          
pv->obj.y = y;
pv->next = (*top);  //записываем адрес нынешней вершины.
(*top) = pv;        //созданный узел становится новой вершиной стека, связь с предыдущей верниной выставлена.
SIZE_STACK++;
return ;
}
 
}
 
//---------------------------------------------------------------------
//Извлечь из стека. 
Point pop(Node **const top){     
Node *tmp = (*top);     //получаем адрес узла, который сейчас на вершине.
//Если узел существует !=NULL
if(tmp){
(*top)=(*top)->next;    //на вершину заносим предпоследний.
Point obj = tmp->obj;   //считываем данные с узла.
delete tmp;             //удаляем узел, с вершины.
SIZE_STACK--;
return obj;             //возврщаем полученные данные.
}
Point def_obj(UNKNOWN_VALUE,UNKNOWN_VALUE);   //стека не существует.
return def_obj;
}
 
 
//---------------------------------------------------------------------
//вывод матрицы.
long m_print(RAT_MATRIX matrix, const int h , const  int w){
 
    for( int i = 0 ; i < h ; i++ ){
        for( int j = 0 ; j < w ; j++){
        cout<<matrix[i][j]<<' ';
        }
        cout<<endl;
    }
cout<<endl;
return M_OK;
}
 
//ввод матрицы.
long m_input(RAT_MATRIX matrix, const int h , const int w){
 
    for( int i = 0 ; i < h ; i++ )
         for( int j = 0 ; j < w ; j++){
                 cout<<matrix[i][j]<<' '; 
                 cin>>matrix[i][j];
                 }
 
cout<<endl;
return M_OK;
}
 
//вывод матрицы. в файл.
long m_save(RAT_MATRIX matrix, const int h , const int w, const char *path){    
ofstream obj_save(path);
if(!obj_save)return M_ERROR;
 
for( int i = 0 ; i < h ; i++ ){
        for( int j = 0 ; j < w ; j++){
 
        obj_save<<matrix[i][j];
        }
 
    }
 
return M_OK;
}
//чтение матрицы из файла.
long m_load( RAT_MATRIX matrix, const int h , const int w, const char *path){
ifstream obj_load(path);
if(!obj_load)return M_ERROR;
for( int i = 0 ; i < h ; i++ ){
        for( int j = 0 ; j < w ; j++){
        if(obj_load.eof())break;
        obj_load>>matrix[i][j];
        }
    }
 
return M_OK;
}
 
 
 
//упорядочивание рядов(1).
long m_transform(RAT_MATRIX matrix, const int h , const int w){
 
 
int i(0),j(0);
int counter = 0;
cout<<"Work trans Start---------------------------------------\n";
 
 
//переходим к очередной строке
  for( i = 0 ; i < h ; i++ ){
 
      //переходим к очередному столбцу
      for( j = 0; j < w ; j++ ){
 
//Если элемент в своём ряду.
if(matrix[i][j]==RAD_KEYS[i])
{
//-----------------------------
//-----------------------------
}   
 
//Если элемент не в своем ряду.
if(matrix[i][j]!=RAD_KEYS[i]){
 
int st_jump = j;
bool found = false;
        //Ищем элемент подходящий под этот ряд.
    for(int k = i ; k < h; k++ ){
 
             for( int r = st_jump; r < w; r++ ) {
 
                    if(matrix[k][r]==RAD_KEYS[i]){
 
                    //swap.
                    int tmp = matrix[k][r];
                    matrix[k][r]=matrix[i][j];
                    matrix[i][j] = tmp;
                    r=w; //выход.
                    k=h; //выход.
                    found = true;
                
//-----------------------------
m_print(matrix,h,w); //показываем результат работы.
//-----------------------------
counter++;
                    } // if found 
 
             }//int r = i
 
         st_jump = 0;
 
        }//int k = i
if(found==false)return NOT_RAT_MATRIX; 
 
 
 
     }  //if !=key
 
 
 
 
 
     } //for( j = 0;
 
 }  //for( i = 0
 
 
cout<<"Work trans End---------------------------------------\n";
return counter;
}
//----------------------------------------------------------------------
//упорядочивание рядов(2)
long m_transform(RAT_MATRIX matrix, const int h , const int w, Node **const top){
 
int i(0),j(0);
int counter = 0;
 
cout<<"Work trans Start---------------------------------------\n";
//переходим к очередной строке
for( i = 0 ; i < h ; i++ ){
 
      //переходим к очередному столбцу
      for( j = 0; j < w ; j++ ){
      
//Если элемент в своём ряду.
if(matrix[i][j]==RAD_KEYS[i])
{
//-----------------------------
//-----------------------------
}   
 
//Ищем элемент подходящий под этот ряд.
if(matrix[i][j]!=RAD_KEYS[i]){
 
int st_jump = j;
bool found = false;
 
    for(int k = i ; k < h; k++ ){
 
             for( int r = st_jump; r < w; r++ ) {
                    
                    if(matrix[k][r]==RAD_KEYS[i]){
                    //swap.
                    int tmp = matrix[k][r];
                    matrix[k][r]=matrix[i][j];
                    matrix[i][j] = tmp;
push(top,k,r);      //запоминаем x y.
push(top,i,j);      //запоминаем x y.
                    r=w; //выход.
                    k=h; //выход.
                    found = true;
//-----------------------------
m_print(matrix,h,w); //показываем результат работы.
//-----------------------------
counter++;
                    }  //if found
 
             }//int r = i
 
        st_jump = 0;
 
        }//int k = i
 
if(found==false)return NOT_RAT_MATRIX;  //какой то элемент не найден значит матрица не равнопроцентная
        
 
 
    }  //if !=Key
 
 
 
 
    }  //for( j = 0;
 
 }  //for( i = 0
 
 
cout<<"Work trans End---------------------------------------\n";
return counter;
}
 
 
//--------------------------------------------------------------
/*Возврат элементов на прежние места, не за постоянное время. */
long m_Restore(RAT_MATRIX matrix, const int h , const int  w, Node **const top){
if(isEmpty(*top))return STACK_EMPTY;
int count = 0;  
cout<<"Work restore Start---------------------------------------\n";
while(*top){
    Point obj_1 = pop(top);  
    Point obj_2 = pop(top);
    int tmp = matrix[obj_1.x][obj_1.y];
    matrix[obj_1.x][obj_1.y] = matrix[obj_2.x][obj_2.y];
    matrix[obj_2.x][obj_2.y] = tmp;
    m_print(matrix,h,w);
    count++;
}
cout<<"Work restore End---------------------------------------\n";
return count;
}
//----------------------------------------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------------
//Если работать со столбцами:-------------------------------------------------------------------------------
//упорядочивание рядов(1.1)
long m_transform_2(RAT_MATRIX matrix, const int h , const int w){
 
int i(0),j(0);
int counter = 0;
cout<<"Work trans(2) Start---------------------------------------\n";
//переходим к очередной строке
  for( i = 0 ; i < w ; i++ ){
 
      //переходим к очередному столбцу
      for( j = 0; j < h ; j++ ){
 
//Если элемент в своём ряду.
if(matrix[j][i]==RAD_KEYS[i])
{
//-----------------------------
//-----------------------------
}   
//Ищем элемент подходящий под этот ряд.
if(matrix[j][i]!=RAD_KEYS[i]){
int st_jump = j;
bool found = false;
    for(int k = i ; k < w; k++ ){
 
             for( int r = st_jump; r < h; r++ ) {
 
                    if(matrix[r][k]==RAD_KEYS[i]){
                    //swap.
                    int tmp = matrix[r][k];
                    matrix[r][k]=matrix[j][i];
                    matrix[j][i] = tmp;
                    r=h; //выход.
                    k=w; //выход.
                    found = true;
//-----------------------------
m_print(matrix,h,w); //показываем результат работы.
//-----------------------------
counter++;
                
                    }  //if found
 
             }//int r = i
 
 
         st_jump = 0;
        }//int k = i
if(found==false)return NOT_RAT_MATRIX;  
    }  //if !=key
 
    }  //for( j = 0;
 
 }  //for( i = 0
 
 
 
cout<<"Work trans(2) End---------------------------------------\n";
return counter;
}
 
 
//упорядочивание рядов(2)
long m_transform_2(RAT_MATRIX matrix, const int h , const int w, Node **const top){
 
int i(0),j(0);
int counter = 0;
cout<<"Work trans(2) Start---------------------------------------\n";
//переходим к очередной строке
  for( i = 0 ; i < w ; i++ ){
 
      //переходим к очередному столбцу
      for( j = 0; j < h ; j++ ){
 
//Если элемент в своём ряду.
if(matrix[j][i]==RAD_KEYS[i])
{
//-----------------------------
//-----------------------------
}   
//Ищем элемент подходящий под этот ряд.
if(matrix[j][i]!=RAD_KEYS[i]){
int st_jump = j;
bool found = false;
        for(int k = i ; k < w; k++ ){
 
             for( int r = st_jump; r < h; r++ ) {
                    if(matrix[r][k]==RAD_KEYS[i]){
                    //swap.
                    int tmp = matrix[r][k];
                    matrix[r][k]=matrix[j][i];
                    matrix[j][i] = tmp;
push(top,j,i);      //запоминаем x y
push(top,r,k);      //запоминаем x y
                    r=h; //выход.
                    k=w; //выход.
                    found = true;
//-----------------------------
m_print(matrix,h,w); //показываем результат работы.
//-----------------------------
counter++;
                    
                    }  //if //if found
             }//int r = i
         st_jump = 0;
        }//int k = i
 
        if(found==false)return NOT_RAT_MATRIX;  //какой то элемента не найден значит матрица не равнопроцентная
        
 
    }  //if !=key
 
 
    }  //for( j = 0;
 
 }  //for( i = 0
 
 
cout<<"Work trans(2) End---------------------------------------\n";
return counter;
}
 
 
//-----------------------------------------------------------------------------------------------------------
//TimeShift swap. обмен под контролем LIFO.
long T_swap(RAT_MATRIX matrix, int x_1, int y_1, int x_2, int y_2,const int h, const int w, Node **const top){
//-----------------------------------------
if((x_1==x_2)&&(y_1==y_2))return EQUAL_IND;
if((x_1>=w||x_2>=w)||(x_1<0||x_2<0)) return ERROR_INDEX ;
if((y_1>=h||y_2>=h)||(y_1<0||y_2<0)) return ERROR_INDEX ;
//-----------------------------------------
cout<<"TimeShift swap\n";   
int tmp = matrix[x_1][y_1];
matrix[x_1][y_1] = matrix[x_2][y_2];
matrix[x_2][y_2] = tmp;
push(top,x_1,y_1);
push(top,x_2,y_2);
return M_OK;
}
//отема при помощи LIFO.
long T_undo(RAT_MATRIX matrix, Node **const top){
if(isEmpty(*top))return STACK_EMPTY;
cout<<"Undo\n";
Point obj_1 = pop(top);
Point obj_2 = pop(top);
if(obj_1.point_valid()&&obj_2.point_valid()){
int tmp = matrix[obj_1.x][obj_1.y];
matrix[obj_1.x][obj_1.y] = matrix[obj_2.x][obj_2.y];
matrix[obj_2.x][obj_2.y] = tmp;
}
return M_OK;
}
Выравнивание при вставке изменилось это не моя вина.


Ещё

Идея сортировки: это не моя идея, раз настаивали: вот.
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
using namespace std;
 
static int size = 0;
 
 
struct Node {
Node *next;
int index;
};
void push(Node**top, int idx){
    if(*top==NULL){
     Node * pv =new Node;
     pv->index=idx;
     pv->next = NULL;
     (*top)=pv;
     size++;
     return ;
    }
    else {
     Node *pv =new Node;
     pv->index=idx;
     pv->next = (*top);
     (*top)=pv;
     size++;
     return ;
    }
 
}
 
int pop(Node **top){
Node *tmp = (*top);
if(tmp){
int t = tmp->index;
(*top)=(*top)->next;
delete tmp;
size--;
return t;
}
return -1; 
}
 
 
 
int main(){
 
Node *top = NULL;
int count = 0;
const int H = 5;
const int W = 5;
 
int matrix[H][W] = {
    {1,2,5,4,3},
    {2,1,1,5,4},
    {1,1,2,5,3},
    {2,2,5,4,3},
    {5,4,4,3,3}
};
 
 
  int *mas = &matrix[0][0];
  for( int i = 0 ; i < (H*W)-1; i++ ){
        for( int j = i + 1; j<H*W; j++){
 
        if(mas[j]<mas[i]){
        int tmp = mas[i];
        mas[i]=mas[j];
        mas[j]=tmp;
        push(&top,i);
        push(&top,j);
count++;
cout<<"Swap: "<<count<<endl;
for( int k = 0 ; k < H ; k++){
    for(int p = 0 ; p < W; p++){
    cout<<matrix[k][p]<<' ';
    }
cout<<endl;
}
cout<<endl;
 
        }   
 
    }
}
 
 
cout<<"Size stack: "<<size<<endl; 
cout<<"Swaps: "<<count<<endl;
char c;
cout<<"Continue : ";cin>>c;
cout<<endl;
cout<<endl;
 
count = 0;
 
while(top){
int index1 = pop(&top);
int index2 = pop(&top);
int tmp = mas[index1]; 
mas[index1] = mas[index2];
mas[index2] = tmp;
count++;
cout<<"Swap: "<<count<<endl;
for( int k = 0 ; k < H ; k++){
    for(int p = 0 ; p < W; p++){
    cout<<matrix[k][p]<<' ';
    }
cout<<endl;
}
cout<<endl;
 
}
 
cout<<"Size stack: "<<size<<endl; 
cout<<"Swaps: "<<count<<endl;
cout<<endl;
system("pause");
return 0;
}
Выравнивание при вставке изменилось это не моя вина.



Итог теме:

Почему тема была названа так, и как была придумана задача:
Почему тема была названа так, и как была придумана задача:
1. Название: Звучит интересно, и заманчиво.

2. Стек - это управление временем и ходом выполнения:
механизм позволяющий вернуться назад и сделать, что то полезное.

3. TimeShift buffer в моем тв тюнере дает функциональность известную как: time machine .
4. Лень делать ввод матрицы.
5. Матрицы фиксированного размера и содержания присутствуют в природе,
я это не выдумывал, и видел много всякого, с уверенностью 99% скажу они есть,
но они не так повсеместны.

6. Я выбрал осмысленную начинку матрицы, и просчитал пропорции матрицы, и соотношение начинки.
7. Вычислил что такую матрицу можно легко выстроить однократной
заменой(неправильно стоящих) без всяких сортировок, наглых затираний записей и прочих неинтересностей.

8. Придумал алгоритм:
9. Вычислил, что такую матрицу можно вернуть в исходное состояние ненакладным образом,
по протоптанным следам алгоритма пункта (8).

Вот так я и придумал задачу.


Сложность задачи:
Сложность задачи:
Мое мнение: сложность задачи оценивать бесполезно, так как, кому-то легко, а кому-то непросто.
Если условия не понятно изложил, прошу прощения, как смог.


Зачем нужна была эта тема:
Зачем нужна была эта тема:
1. Вам не надоели слишком простые и стандартные задачи,
хотелось бы хоть какого нибудь разнообразия: не стандартных Вузовских фабричных задач?
3. Вы хотите развивать свои программистские навыки далее(всегда есть куда расти).
4. Вы хотите в конце концов не работать за одно несчастное спасибо, хотя бы иногда?
5. Этой темой я хотел сказать: ребята давайте хотя бы изредка
придумывать, что то свое нестандартное и интересное(нужное в программах),
естественно с умеренным энтузиазмом и сложностью.

Может кто-нибудь последует моему примеру, и в недалеком будущем будет еще подобные
и более интересные темы.

Возможно я первопроходец в придумывании задач на этом форуме,
возможно поэтому задача не слишком практична(нужная),
наверно я еще плохой постановщик задач. У каждого своей уровень интеллекта, знаний и опыта.
вы можете придумать, что то более интересное, и жизненно необходимое.

Примечание: исходный код:
Примечание: исходный код:
//----------------------------------------------------------------------------------------
1. Одновременно кодил и писал комментарии, что бы не пропустить важных моментов.
2. Если где есть логические ошибки, и не только логические, прошу прощения, отладку эта система не проходила.
3. Надеюсь вам будет понятно.
//----------------------------------------------------------------------------------------


Прочее:
Прочее:
На кой мне эта задача?
Если вы не видите смысла в этой задаче, или она вам ни чем не помогла...
или вы не чего полезного не узнали, или вам что не понравилось,
лучше не делайте оффтопа, не высказывайтесь,
мне как создателю не приятно смотреть на это:
потому как я много времени потратил на этот пост и программу,
и выслушивать чье-то недовольство мне просто не хочется, и это будет не хорошо с
вашей стороны, потому как я ни кому плохого не делал.

И вообще по хорошему после завершающего слова автора темы, ее бы следовало закрыть.
Для переговоров есть ЛС...
Просто уже участвовать в этой теме не хочется...
Тем более я уже дал ответ...

Не по теме:

Если кто-то скажет мне: что мол я знал решение, а ты меня не удивил ни чем:
я вам отвечу следующие, если бы вы знали, и вам было лень писать программу,
тогда хотя бы, объяснили смысл работы вашего алгоритма,
в конце концов это не трудно, мой алгоритм, в двух словах можно объяснить.




Выражаю всем участвующим в этой теме, искреннею благодарность.
Спасибо всем.
Желаю всем удачи и успехов.
1
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
21.04.2010, 19:41
Лучший ответ Сообщение было отмечено как решение

Решение

Твой алгоритм имеет сложность 0(n^4) это намного медленнее квиксорта. На практике алгоритм с такой сложностью никто не будет использовать. Идеально твоя задача решается видоизмененным квиксортом, который записывает свои перемещения(в стек). Непонятна твоя критика по поводу медленности сортировки по сравнению с твоим методом.
0
Унылый школьник
 Аватар для Demihalf
126 / 60 / 10
Регистрация: 06.11.2009
Сообщений: 353
21.04.2010, 20:39
Так и не понял, зачем такие сложности и стек-велосипед...
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
24.04.2010, 00:09
Цитата Сообщение от Alexandoros Посмотреть сообщение
Твой алгоритм имеет сложность 0(n^4) это намного медленнее квиксорта.
Alexandoros, каким образом ты получил данное значение сложности?
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
24.04.2010, 13:49  [ТС]
О сортировке:
О сортировке:

Сортировка разрешалась в задаче:
При следующей семантике:
Type Сортировка = Мозг -> Думать(); //Вы сами придумали эту сортировку(см. ограничение к задаче.)

Сортировка не разрешалась при следующей семантике:
Type *Сортировка = Google -> Find (); //Вы использовали чужую сортировку (см. ограничения к задаче.)
Пользоваться чужим не разрешалось..

И вообще, если присутствует сортировка, ее обычно оговаривают в условии задачи.
В данной теме, чужую сортировку притянули за уши,
простое нарушение ограничений в решении задачи, вот и все.

Просто предлагающие сортировать: заставили меня написать то, что вы сейчас читаете.


На что была задача:
На что была задача:
На внимательность, и сообразительность: свойства равно процентной матрицы.

Я даже и не думал, что сортировку кто-то предложит, если бы знал:
написал для особенно одаренных: сортировка запрещается(это пустая трата времени).


Оценка сложности алгоритмов:
Оценка сложности алгоритмов:
Я сглупил:
но это есть практически самый медленный способ.
Alexandoros продолжил, так же развивать ложное направление:

Твой алгоритм имеет сложность 0(n^4) это намного медленнее квиксорта. На практике алгоритм с такой сложностью никто не будет использовать.
1. Обычно, не сравнивают алгоритмы,
имеющие частное и общее назначение,
либо сравнивают общее с общим, либо частное с частным.

2. Алгоритмы, имеющие совсем разные понятия(виды) и принципы, не сравниваются:
Мой алгоритм не относится к сортировкам:
Мой алгоритм просто говоря:
Набор в ряды по соответствующим ключам, и о какой сортировке речь.

Сравнивать Алгоритмы с разных областей: это вообще то нехорошо.
Я сказал про скорость не по делу, зачем сам не знаю(просто не подумав ляпнул), случайность,
скорее всего, поэтому и тема развилась не правильно.


Идеально твоя задача решается видоизмененным квиксортом, который записывает свои перемещения(в стек). Непонятна твоя критика по поводу медленности сортировки по сравнению с твоим методом.
Почему я не выбрал Qsort при решении:
Почему я не выбрал Qsort при решении:
1 . Cм пункт: О сортировке: это прямое нарушение правил.
2 . накладный возврат матрицы в исходное состояние, после использования QSort.

Простая действительность:
//-----------------------------------------------------------------------------------------
В Сортировке количество обменов может превышать размер коллекции,
уже поэтому сортировка меня не устраивает.
//-----------------------------------------------------------------------------------------

//-----------------------------------------------------------------------------------------
Количество обменов == количеству возвратов:
то есть степень полной раскрутки стека == кол-ву обменов в алгоритме.
При раскрутке стека, совершаются обмены, обратные обменам алгоритма....
//------------------------------------------------------------------------------------------

Важность количества обменов, повышается тогда: когда в обмене участвуют большие блоки данных.

Исходные коды с подтверждением очевидного:
Сортировку Qsort, использовать мне было не зачем.

Работа с равнопроцентными матрицами….. трансформирование……

Алгоритм от Genius Ignat:
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
//The source code and comment by Genius Ignat©
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
 
//Тестирование алгоритма придуманного Genius Ignat ©: 
//Название алгоритма: ONE_SWAP THIS_IS_THIS ©  Genius Ignat ©. 
//Выравнивающий алгоритм для равно-процентной матрицы........
 
//Алгоритм для упорядочивания равнопроцентных матриц.
//Количество обменов(блоков памяти), которое делает алгоритм: всегда <H*W  . ==H*W быть не может, ни когда.
//Последняя строка выравниванию не подлежит, тоже простое свойство, алгоритма:  - n количество обменов.
 
//Что бы не тратить время, свойство равнопроцентности в алгоритме не проверяеися.
//А если матрица не равнопроцентная по результату работы можно будет это понять.
 
 
/*
Алгоритм работает стабильнее и быстрее некоторых сортировок, 
совершает меньше перезаписей блоков памяти, и это вообще не сортировочный алгоритм, зачем сравнивать,
в этом я не вижу смысла, что с чем сравнивать?
    
И вообще смотреть пошагово на сортировку данных:  равно-процентных матриц мне лично не нравиться, выглядит не красиво.    
Мне приятнее, когда в каждом шаге делается кокретное, а не просто топтание на одном месте...
 
*/
 
//Основной код:
//------------------------------------------------------------------------------------------------------------------
const long H = 40;               //высота матрицы.
const long W = 40;               //ширина матрицы.
/*Массив ключей от рядов можно настроить и на другую матрицу, имеющию стандартную равнопроцентную структуру */
//Массив ключей от рядов.
const int RAD_KEYS[] = {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};                 //правильный ключ от каждого ряда
typedef int RAT_MATRIX[H][W];                                                 //тип матрицы.                                   
/*
 
//Пройденные тесты:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------------------------------------------------
(1)
 {1,4,4,4,4,4,5,7,8,8}
 {2,2,1,1,3,3,5,7,8,8}
 {2,2,2,1,1,2,5,7,9,9}
 {4,4,4,4,4,6,7,8,9,9}
 {1,1,2,2,5,6,7,8,9,10}
 {3,3,3,3,5,6,7,8,9,10}
 {5,5,5,5,5,6,7,9,10,10}
 {2,6,6,6,6,7,8,9,10,10}
 {3,3,3,3,6,7,8,9,10,10}
 {1,1,1,2,6,7,8,9,10,10}
при H == 10 (100 элементов)
    W == 10
 
swaps: 79
return:  79
const int RAD_KEYS[] = {1,2,3,4,5,6,7,8,9,10};
//--------------------------------------------------
(2)
 {1,4,4,4,4,4,5,7,8,8,11,12,13,14,15,16,17,18,19,20}   
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20}                           
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19}                            
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20}                            
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20}                             
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20}                      
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20}                          
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,20}                           
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11}                       
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11}   
                           
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11}
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11}  
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,19,20} 
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20} 
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20} 
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20}  
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20} 
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19}  
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20} 
 {1,1,1,2,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,20} 
 
при  H == 20  (400 элементов).
     W == 20
 
swaps: 352
return: 352
const int RAD_KEYS[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
//-------------------------------------------------------------------------
(3)
 {1,4,4,4,4,4,5,7,8,8,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} 
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20,30,22,23,24,25,26,27,28,29,21,31,32,33,34,35,36,37,38,39,40}                        
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                        
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                        
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,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}                           
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,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}                    
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}                        
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}                          
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,32,39,38,37,36,35,34,33,40,31,30,29,28,27,26,25,24,23,22,21}                     
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,40,30,29,28,27,26,25,24,23,22,21} 
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21} 
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21} 
 {2,2,2,1,1,2,5,7,9,9,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} 
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,32,31,34,35,36,37,38,39,40}
 {1,1,1,2,6,7,8,9,10,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,36,35,37,38,39,40}
  
 {1,4,4,4,4,4,5,7,8,8,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,35,37,38,39,40}
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,32,31,34,35,36,37,38,39,40}                       
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                        
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                         
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                          
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                 
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}                         
 {2,6,6,6,6,7,8,9,10,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}                          
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21}                     
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21}  
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,40,30,29,28,27,26,25,24,23,22,21}
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11,32,39,38,37,36,35,34,33,40,31,30,29,28,27,26,25,24,23,22,21}
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,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}  
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,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}  
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40} 
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40} 
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20,30,22,23,24,25,26,27,28,29,21,31,32,33,34,35,36,37,38,39,40} 
 {1,1,1,2,6,7,8,9,10,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} 
                              
при  H == 40  (1600 элементов).
     W == 40
swaps: 1505
return: 1505
const int RAD_KEYS[] = 
{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};
*/
 
int count = 0;
long m_print(RAT_MATRIX matrix, const int h , const int w);                   
long m_transform(RAT_MATRIX matrix, const int h , const int w);     
         
int main(){
 
    RAT_MATRIX matrix = {
 
 {1,4,4,4,4,4,5,7,8,8,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}, 
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20,30,22,23,24,25,26,27,28,29,21,31,32,33,34,35,36,37,38,39,40},                       
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                        
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                        
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,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},                           
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,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},                    
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},                        
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},                          
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,32,39,38,37,36,35,34,33,40,31,30,29,28,27,26,25,24,23,22,21},                     
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,40,30,29,28,27,26,25,24,23,22,21}, 
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21}, 
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21}, 
 {2,2,2,1,1,2,5,7,9,9,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}, 
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,32,31,34,35,36,37,38,39,40},
 {1,1,1,2,6,7,8,9,10,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,36,35,37,38,39,40},
  
 {1,4,4,4,4,4,5,7,8,8,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,35,37,38,39,40},
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,32,31,34,35,36,37,38,39,40},                       
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                       
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                         
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                          
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                 
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},                         
 {2,6,6,6,6,7,8,9,10,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},                         
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21},                     
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21},  
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,40,30,29,28,27,26,25,24,23,22,21},
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11,32,39,38,37,36,35,34,33,40,31,30,29,28,27,26,25,24,23,22,21},
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,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},  
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,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}, 
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}, 
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}, 
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20,30,22,23,24,25,26,27,28,29,21,31,32,33,34,35,36,37,38,39,40}, 
 {1,1,1,2,6,7,8,9,10,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} 
 
};
 
m_transform(matrix,H,W); 
m_print(matrix,H,W);
 
printf("Swaps: %d",count);
system("pause");
return 0;
}
 
 
//вывод матрицы.
long m_print(RAT_MATRIX matrix, const int h , const  int w){
    for( int i = 0 ; i < h ; i++ ){
        for( int j = 0 ; j < w ; j++){
        printf("%d ",matrix[i][j]);
        }
        printf("\n");
    }
printf("\n");
return 0;
}
 
 
long m_transform(RAT_MATRIX matrix, const int h , const int w){
int i,j;
for( i = 0 ; i < h ; i++ ){
if (i == h - 1)break;    
    for( j = 0 ; j < w ; j++ ){
 
 
     if(matrix[i][j]!=RAD_KEYS[i]){
       int r = j;
       for(int k = i ; k < h; k++ ){
          for(; r < w; r++){
                    if(matrix[k][r]==RAD_KEYS[i]){                 
                    int tmp = matrix[k][r];
                    matrix[k][r]=matrix[i][j];
                    matrix[i][j] = tmp;
                    r=w; //выход.
                    k=h; //выход.
count++;
                    } // if found 
          } //;r<w
 
        r = 0;
 
     }//int k = i
 
 
}//if !=key
 
}//for( j = 0;
 
}//for( i = 0
 
 
return 0;
}

QSort сортировка:
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#include <stdio.h>
#include <stdlib.h>
//Показатели qsort:
/*
//Пройденные тесты:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------------------------------------------------
(1)
 {1,4,4,4,4,4,5,7,8,8}
 {2,2,1,1,3,3,5,7,8,8}
 {2,2,2,1,1,2,5,7,9,9}
 {4,4,4,4,4,6,7,8,9,9}
 {1,1,2,2,5,6,7,8,9,10}
 {3,3,3,3,5,6,7,8,9,10}
 {5,5,5,5,5,6,7,9,10,10}
 {2,6,6,6,6,7,8,9,10,10}
 {3,3,3,3,6,7,8,9,10,10}
 {1,1,1,2,6,7,8,9,10,10}
при H == 10 (100 элементов)
    W == 10
swaps: 229.
return: 229.
//--------------------------------------------------
(2)
 {1,4,4,4,4,4,5,7,8,8,11,12,13,14,15,16,17,18,19,20}   
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20}                           
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19}                            
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20}                            
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20}                             
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20}                      
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20}                          
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,20}                           
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11}                       
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11}   
                           
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11}
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11}  
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,19,20} 
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20} 
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20} 
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20}  
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20} 
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19}  
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20} 
 {1,1,1,2,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,20} 
 
при  H == 20  (400 элементов).
     W == 20
 
swaps: 1177.
return: 1177. 
//-------------------------------------------------------------------------
(3)
 
 {1,4,4,4,4,4,5,7,8,8,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} 
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20,30,22,23,24,25,26,27,28,29,21,31,32,33,34,35,36,37,38,39,40}                        
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                        
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                        
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,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}                           
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,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}                    
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}                        
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}                          
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,32,39,38,37,36,35,34,33,40,31,30,29,28,27,26,25,24,23,22,21}                     
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,40,30,29,28,27,26,25,24,23,22,21} 
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21} 
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21} 
 {2,2,2,1,1,2,5,7,9,9,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} 
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,32,31,34,35,36,37,38,39,40}
 {1,1,1,2,6,7,8,9,10,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,36,35,37,38,39,40}
  
 {1,4,4,4,4,4,5,7,8,8,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,35,37,38,39,40}
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,32,31,34,35,36,37,38,39,40}                       
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                        
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                         
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                          
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}                 
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}                         
 {2,6,6,6,6,7,8,9,10,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}                          
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21}                     
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21}  
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,40,30,29,28,27,26,25,24,23,22,21}
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11,32,39,38,37,36,35,34,33,40,31,30,29,28,27,26,25,24,23,22,21}
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21}
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,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}  
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,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}  
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40} 
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40} 
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20,30,22,23,24,25,26,27,28,29,21,31,32,33,34,35,36,37,38,39,40} 
 {1,1,1,2,6,7,8,9,10,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}                            
 
при  H == 40  (1600 элементов).
     W == 40
//----------------------------------------------------------------------------------------------------------------
swaps: 5889. 
return: 5889. 
Настораживает тот факт, что стек после qsort придётся раскручивать долго и нудно, а где приеимущество?
А если обменивать обратно: большие блоки памяти, через сохранённые позиции: [i] в стеке.
И где же : ultra return ??????!!!!....
...................................................................................................................
//-----------------------------------------------------------------------------------------------------------------
*/
int count = 0 ;
const int H = 40;
const int W = 40;
typedef int RAT_MATRIX[H][W];
 
long qsort(int *mass, int size);
long m_print(RAT_MATRIX matrix, const int h , const  int w);
 
 
int main(){
int matrix[H][W] = {
 
 {1,4,4,4,4,4,5,7,8,8,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}, 
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20,30,22,23,24,25,26,27,28,29,21,31,32,33,34,35,36,37,38,39,40},                        
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                        
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                        
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,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},                           
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,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},                    
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},                        
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},                          
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,32,39,38,37,36,35,34,33,40,31,30,29,28,27,26,25,24,23,22,21},                     
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,40,30,29,28,27,26,25,24,23,22,21}, 
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21}, 
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21}, 
 {2,2,2,1,1,2,5,7,9,9,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}, 
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,32,31,34,35,36,37,38,39,40},
 {1,1,1,2,6,7,8,9,10,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,36,35,37,38,39,40},
  
 {1,4,4,4,4,4,5,7,8,8,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,36,35,37,38,39,40},
 {2,2,1,1,3,3,5,7,8,8,12,11,14,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,33,32,31,34,35,36,37,38,39,40},                       
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,20,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                        
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                         
 {1,1,2,2,5,6,7,8,9,10,11,12,13,15,14,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                          
 {3,3,3,3,5,6,7,8,9,10,15,12,13,14,11,16,17,18,19,20,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40},                 
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},                         
 {2,6,6,6,6,7,8,9,10,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},                          
 {3,3,3,3,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21},                     
 {1,1,1,2,6,7,8,9,10,10,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,30,40,29,28,27,26,25,24,23,22,21},  
 {1,4,4,4,4,4,5,7,8,8,20,19,18,17,16,15,14,13,12,11,31,39,38,37,36,35,34,33,32,40,30,29,28,27,26,25,24,23,22,21},
 {2,2,1,1,3,3,5,7,8,8,20,19,18,17,16,15,14,13,12,11,32,39,38,37,36,35,34,33,40,31,30,29,28,27,26,25,24,23,22,21},
 {2,2,2,1,1,2,5,7,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},
 {4,4,4,4,4,6,7,8,9,9,11,12,13,14,15,16,17,18,19,20,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21},
 {1,1,2,2,5,6,7,8,9,10,15,12,13,14,11,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},  
 {3,3,3,3,5,6,7,8,9,10,11,12,13,15,14,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}, 
 {5,5,5,5,5,6,7,9,10,10,11,12,13,14,15,16,17,19,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}, 
 {2,6,6,6,6,7,8,9,10,10,11,12,13,14,15,16,17,18,20,19,22,21,24,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40}, 
 {3,3,3,3,6,7,8,9,10,10,12,11,14,13,15,16,17,18,19,20,30,22,23,24,25,26,27,28,29,21,31,32,33,34,35,36,37,38,39,40}, 
 {1,1,1,2,6,7,8,9,10,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} 
};
 
int *mas = (int*)matrix;
qsort(mas,H*W);
m_print(matrix,H,W);
printf("Swaps: %d",count);
printf("\n");
 
 
system("pause");
return 0;
}
 
 
long qsort(int *mass, int size){    
int i = 0, j = size;   
int temp, p;
      p = mass[ size>>1 ];     
     
     do {
        while (mass[i] < p) i++;
        while (mass[j] > p) j--;
 
    if (i <= j) {
      count++;
      temp = mass[i];
      mass[i] = mass[j]; 
      mass[j] = temp;
      i++; j--;
    }
} while (i <= j);
     
if ( j > 0 ) qsort(mass, j);
if ( size > i ) qsort(mass+i, size-i);
return 0;
}
 
 
//вывод матрицы.
long m_print(RAT_MATRIX matrix, const int h , const  int w){
    for( int i = 0 ; i < h ; i++ ){
        for( int j = 0 ; j < w ; j++){
        printf("%d ",matrix[i][j]);
        }
        printf("\n");
    }
  printf("\n");
return 0;
}
Посмотрев: на то, что выше:
5889 - обменов меня не устраивает, слишком накладная раскрутка стека будет,
уже не хочется к Qsort прикручивать стек,
потому как, не вижу преимуществ, вообще…..
Не хочу терять огромное время на возврат.....

Завершение:
Мой алгоритм это просто: кратчайший путь решения задачи:
за меньшее число обменов,
алгоритм экономит чернила: если выводить каждый обмен.

Алгоритм довольно быстр и красив это видно, когда запускаешь: мой ответ.
После запуска программы: из пункта: ЕЩЕ,
о сортировке вообще даже говорить не хочется, потому как она просто не красива....


Вывод из сказанного: читайте внимательнее задание, и обдумывайте каждый свой ответ………
1
Заблокирован
24.04.2010, 13:54
Мне понравилось задача, правда я ее не решил, спасибо Genius Ignat за решенение,
мне оно пригодиться…
Genius Ignat + 1.
А сортировку, зачем было приплетать, я так и не понял, зачем было портить тему…..
0
Унылый школьник
 Аватар для Demihalf
126 / 60 / 10
Регистрация: 06.11.2009
Сообщений: 353
24.04.2010, 15:01
J_Max, просто потому что сортировка - самый простой и очевидный вариант...
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
24.04.2010, 22:25
Цитата Сообщение от Demihalf Посмотреть сообщение
J_Max, просто потому что сортировка - самый простой и очевидный вариант...
Это далеко не самый простой и явно не самый эффективный подход. Как правильно сказал Genius Ignat, этот вариант может привести к большому количеству обменов.
Сначала надо переписать матрицу в массив, затем массив отсортировать и перегнать обратно в матрицу. Если не рассматривать вариант с восстановлением исходной матрицы, то смысла в этих манипуляция никакого. Варианты с std::set или std::map справятся с задачей быстрее, кроме того использование std::map позволит еще и проверить условие равнопроцентного содержания элементов в матрице.
1
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
26.04.2010, 14:14  [ТС]
Предыдущая версия m_transform, это еще не самый короткий способ,
вот решил его оптимизировать:
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
//модификация: провел оптимизацию......
long m_transform_2(RAT_MATRIX matrix, const int h , const int w){
int i, j ;
 
for( i = 0 ; i < h ; i++ ){
if ( i == h - 1)break;    
for( j = 0 ; j < w ; j++ ){
 
if(matrix[i][j]!=RAD_KEYS[i]){
      for( int k = i + 1; k < h; k++ ){
      for( int r = 0; r < w; r++ ){
 
        if(matrix[k][r]==RAD_KEYS[i]){                 
                int tmp = matrix[k][r];
        matrix[k][r]=matrix[i][j];
        matrix[i][j] = tmp;
        r=w; //выход.
        k=h; //выход.
 
        } // if found 
 
      } //for(int r = 0;
     }//for(int k = i+1;
 
}//if !=key
 
 
}//for( j = 0;
}//for( i = 0
return 0;
}
Доработанный алгортим, теперь он не делает лишних обменов в рассматриваемых строках,
поиск нужного происходит сразу с следующей строки, по этому элементы которые стоят на своем(В своем ряду)...
месте не обмениваются лишний раз....
Проверена на предыдущих примерах, которые я приводил.....

при H == 10 (100 элементов)
W == 10
swaps: 59.

при H == 20
W == 20 (400 элементов)
swaps: 282.

при H == 40
W == 40 (1600 элеметов).
swaps: 1195.



Свойства алгоритма сильно не изменились, законы те же что и раньше,
только обменов еще меньше....
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12844 / 7593 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
26.04.2010, 15:55
По-моему проще свести задачу к получению и сортировке уникальных значений. А заполнять этими значениями ряды двухмерного массива в любом случае быстрее, чем переставлять значения в массиве с места на место... Алгоритм извлечения этих самых уникальных значений можно, конечно, и самому придумать, а можно (если мега-супер-турбо-скорости по условию не требуется) стандартный контейнер set использовать...

Добавлено через 38 минут
Закрыто по просьбе топикстартера.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2010, 15:55

Как запустить TimeShift на Windows 7?
помогите запустить игру на семерке(starter), комп : процессор core i-5 2.3GHz 4 ядра, гб оперативной памяти, видеокарта geforce gt 540m...

TimeShift не запускается из-за отсутствия d3dx9_27.dll
Здравствуйте, при запуске игр time shift и spore выходит сообщение об отсутствии файла d3dx9_27.dll, куда нужно установить этот файл? ...

TimeShift: при запуске появляется окошко и исчезает
На днях решил установить TimeShift. Однако после запуска игры появляется окно(размером в четверть примерно) и исчезает. Скачивал разные...

При запуске игры TimeShift дисплей тухнет
привет такая ситуация: загрузил игру TimeShift при ее запуске дисплей тухнет (пишет сигнал не действительный). Что это может быть?

Ошибка: Unhandled exception at 0x772115de in TimeShift.exe: 0xC0000005: Access violation reading location 0x00041000.
всем привет! При использовании двумерного массива постоянно появляется ошибка :Unhandled exception at 0x772115de in TimeShift.exe:...


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

Или воспользуйтесь поиском по форуму:
32
Закрытая тема Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru