powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Генерация кубических графов
6 сообщений из 6, страница 1 из 1
Генерация кубических графов
    #37136874
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гуглил, гуглил, нашел только на англицком Гуннара Брикмана и его соавтора статью - очень конспективно + в англицком не силен. Хочется более подробно на русском + не мешело бы какой-нить исходник программы (не важно на каком языке)

Спасибо
...
Рейтинг: 0 / 0
Генерация кубических графов
    #37136939
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kmaw,

Представь себе обыкновенное пятимерное пространство. Потом уменьши до 3х-мерного )))

Преобразования/упрощения схемы нетривиальны. А само представление - чепуха.
...
Рейтинг: 0 / 0
Генерация кубических графов
    #37137162
Algol36
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kmaw,

Код: plaintext
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.
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication67
{
    class Program
    {
        static void Main(string[] args)
        {
            //число вершин
            int size = 8;
            //необходимое число единиц в врехнем треугольнике матрицы смежности
            int count = size * 3 / 2;
            //создаем матрицу смежности
            SymmetricalMatrix matrix = new SymmetricalMatrix(size);
            //находим всевозможные кубические графы
            int matrixCount = 0;
            foreach (SymmetricalMatrix m in Build(count, -1, matrix))
            {
                matrixCount++;
                Console.WriteLine("Matrix #"+matrixCount + ": ");
                Console.WriteLine(m);
            }
            //
            Console.WriteLine("Found "+ matrixCount+" graphs");
            Console.ReadLine();
        }

        static IEnumerable<SymmetricalMatrix> Build(int count, int prev, SymmetricalMatrix m)
        {
            if (count <= 0)
            {
                //матрица корректна ?
                if (m.IsCubicGraphMatrix())
                    yield return m;
            }
            else
            {
                for (int i = prev + 1; i <= m.data.Length - count; i++)
                {
                    //ставим единицу в позицию i
                    m.data[i] = 1;
                    //идем к следующему столбцу
                    foreach (var next in Build(count - 1, i, m))
                        yield return next;
                    //удаляем единицу из позиции i
                    m.data[i] = 0;
                }
            }
        }
    }

    //симметричная бинарная матрица, с нулями по диагонали
    public class SymmetricalMatrix
    {
        public readonly int size;
        //верхний треугольник
        public readonly byte[] data;        

        public SymmetricalMatrix(int size)
        {
            this.size = size;
            data = new byte[(size*size - size)/2];
        }

        public int indicesToDataIndex(int i, int j)
        {
            int k = i + 1;
            int l = (k * k + k) / 2;
            return i*size + j - l;
        }

        byte this[int i, int j]
        {
            get{
                if (i == j)
                    return 0;
                
                if(i<j)
                    return data[indicesToDataIndex(i, j)];
                else
                    return data[indicesToDataIndex(j, i)];
            }
        }

        //это действительно корректная матрица смежности для кубического графа ?
        public bool IsCubicGraphMatrix()
        {
            //считаем суммы по столбцам, они должны быть все равны 3
            for(int i=0;i<size;i++)
            {
                int sum = 0;
                for(int j=0;j<size;j++)
                {
                    if(this[i, j]!=0)
                        sum++;
                }
                if(sum!=3) return false;
            }

            return true;
        }

        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < size; j++)
            {
                for (int i = 0; i < size; i++)
                    sb.Append(this[i, j]);
                sb.AppendLine();
            }
            return sb.ToString();
        }
    }
}
...
Рейтинг: 0 / 0
Генерация кубических графов
    #37137197
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!
...
Рейтинг: 0 / 0
Генерация кубических графов
    #37137295
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но это полный перебор всех графов. а можно более целенаправленную генерацию? чтобы по построению граф был кубическим?
...
Рейтинг: 0 / 0
Генерация кубических графов
    #37137297
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglkmaw,

Представь себе обыкновенное пятимерное пространство. Потом уменьши до 3х-мерного )))

Преобразования/упрощения схемы нетривиальны. А само представление - чепуха.

я не настолько гуд знаю математику, чтобы понять ваше высказывание без доп. комментариев - можно для чайника, попроще?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Генерация кубических графов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]