Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Файл исходного кода
- #include <cstdio>
- #include <iostream>
- #include <stdio.h>
- void main() {
- int j, i, n, k;
- int a[10][10];
- list parent, child;
- create2(&parent);
- create2(&child);
- printf("\nWrite parent number: 0"); scanf_s("%d", &k);
- add(&parent, k);
- // Создание матрицы
- printf("\nWrite matrix resolution: 3"); scanf_s("%d", &n);
- for (i = 0; i < n; i++) {
- for (j = 0; j < n; j++) {
- scanf_s("%d", &a[i][j]);
- }
- }
- printf("\nWritten matrix: \n");
- for (i = 0; i < n; i++) {
- for (j = 0; j < n; j++) {
- printf_s("%d ", a[i][j]);
- }
- printf("\n");
- }
- while (!isEmpty(&parent)) {
- // Перебор родителей
- while (!isEmpty(&parent)) {
- get(&parent, &k);
- for (j = 0; j < n; j++) {
- if (a[j][k] == 1) {
- add(&child, j);
- }
- }
- }
- // Выводим детишек :)
- printChain(&child); printf(" ");
- // Приравниваем детей к родителям и выводим
- while (!isEmpty(&child)) {
- get(&child, &k);
- add(&parent, k);
- }
- }
- getchar();
- }
- ===============================================================================================
- // Заголовочный файл
- #include <cstdio>
- #include <iostream>
- const int N = 10;
- struct list {
- int begin; // Позиция первого элемента в очереди (массиве)
- int end; // Позиция последнего элемента в очереди (массиве)
- int data[N];
- };
- // Проверка на пустоту
- int isEmpty(list *q) {
- //return (q->begin == 0) && (q->end == -1);
- return ((q->begin - q->end) == 1);
- }
- // elem == приоритет
- int add(list *q, int elem) {
- // Если очередь заполнена - проверяеи на 'ПСЕВДОПОЛНОСТЬ'
- if (q->end == N - 1) {
- if (q->begin != 0) {
- int i;
- for (i = 0; i <= (q->begin - q->end); i++) {
- q->data[i] = q->data[i + q->begin];
- }
- q->end = q->end - q->begin;
- q->begin = 0;
- }
- else return 0;
- }
- // i - позиция в массиве, куда будем добавлять новый элемент
- int i = q->begin;
- while ((i <= q->end) && (elem >= q->data[i])) {
- i++;
- }
- // От конца до i передвигаем все элементы вправо
- for (int now = q->end; now >= i; now--) {
- q->data[now + 1] = q->data[now];
- }
- // добавляем новый элемент на освободившемся месте
- q->data[i] = elem;
- q->end++;
- return 1;
- }
- // Получить первый элемент из очереди
- int get(list *q, int *elem) {
- if (!isEmpty(q)) {
- *elem = q->data[q->begin];
- q->data[q->begin] = NULL;
- q->begin++;
- return 1;
- }
- return 0;
- }
- void create2(list *P) {
- P->begin = 0;
- P->end = -1;
- P->data[10];
- }
- void printChain(list *q) {
- int data;
- list Q;
- create2(&Q);
- while (!isEmpty(q)) {
- get(q, &data);
- printf("%d", data);
- add(&Q, data);
- }
- while (!isEmpty(&Q)) {
- get(&Q, &data);
- add(q, data);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment