Member 14053198 Ответов: 1

Как я могу найти все циклы в неориентированном графе?


Здравствуйте, не мог бы кто-нибудь помочь мне найти решение для поиска всех циклов в неориентированном графе.

Я работаю с C# VS 2017, ASP.Net 5.2.60618,0

Танки так много для вашей помощи.

НОГА.

Что я уже пробовал:

Я искал в Google и найти предложение решения, но theare много ошибок в моем VS C# IDE. вот копия. Я не знаю, как исправить свои ошибки.

Спасибо снова.

пространство имен akCyclesInUndirectedGraphs
{
классная программа
{
// График, смоделированный как список ребер
статический int[,] graph =
{
{1, 2}, {1, 3}, {1, 4}, {2, 3},
{3, 4}, {2, 6}, {4, 6}, {7, 8},
{8, 9}, {9, 7}
};

статический список<int[]> cycles = новый список<int[]>();

// статический пустота главный(строка[] аргументы)
// {
для (тип int я = 0; Я &л; график.Метода getlength может служить метод(0); я++)
for (int j = 0; j < graph.GetLength(1); j++)
{
findNewCycles(new int[] {graph[i, j]});
}

foreach (int[] cy в циклах)
{
строка s = "" + cy[0];

for (int i = 1; i < cy.Длина; i++)
s += "," + cy[i];

Приставка.WriteLine(s);
}
// }

static void findNewCycles(int[] path)
{
int n = путь[0];
int x;
int[] sub = новый int[путь.Длина + 1];

для (тип int я = 0; Я &л; график.Метода getlength может служить метод(0); я++)
for (int y = 0; y <= 1; y++)
если (график[i, y] == n)
// edge ссылается на наш текущий узел
{
x = график[i, (y + 1) % 2];
if (!visited(x, path))
// соседний узел еще не на пути
{
sub[0] = x;
Массив.Copy(path, 0, sub, 1, path.Длина);
// исследуйте расширенный путь
findNewCycles(суб);
}
еще если ((путь.Длина > 2) && (x == path[путь.Длина - 1]))
// цикл найден
{
int[] p = нормализовать(путь);
int[] inv = invert(p);
если (жизнью(р) и усилитель; & жизнью(инв))
циклы.Добавить(p);
}
}
}

статический bool равен(int[] a, int[] b)
{
боол рэт = (а[0] == б[0]) и усилитель; & (а.Длина == б.Длина);

для (тип int я = 1; рет &усилитель;& (я &л; а.Длина); я++)
если (a[i] != b[i])
{
ret = false;
}

вернуться в отставке;
}

static int[] invert(int[] path)
{
int[] p = новый int[путь.Длина];

for (int i = 0; i < path.Длина; i++)
p[i] = path[путь.Длина - 1 - я];

возвращение нормализации(Р);
}

// поверните путь цикла таким образом, чтобы он начинался с наименьшего узла
static int[] normalize(int[] path)
{
int[] p = новый int[путь.Длина];
int x = наименьший(путь);
int n;

Массив.Copy(path, 0, p, 0, path.Длина);

в то время как (p[0] != x)
{
n = p[0];
Массив.Копия(П 1, П 0, п.Длина - 1);
p[p.Length - 1] = n;
}

возвращение п;
}

static bool isNew(int[] path)
{
bool ret = true;

foreach(int[] p в циклах)
Если (равно(p, путь))
{
ret = false;
перерыв;
}

вернуться в отставке;
}

static int наименьший(int[] путь)
{
int min = путь[0];

foreach (int p in path)
если (p < min)
min = p;

возврат мин;
}

static bool visited(int n, int[] path)
{
bool ret = false;

foreach (int p in path)
если (p == n)
{
рэт = истина;
перерыв;
}

вернуться в отставке;
}
}
}

//
//Циклы для демонстрационного графика:
//
//
//1,3,2
//1,4,3,2
//1,4,6,2
//1,3,4,6,2
//1,4,6,2,3
//1,4,3
//2,6,4,3
//7,9,8

Member 14053198

( // ) В // static void Main(string[] args) и ( // } в Main () close предназначены только для тестирования...

Patrice T

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

Member 14053198

Большое спасибо Патрис.

К счастью, я нашел ошибку. Я забыл скопировать "с помощью SystemCollections.Общий;" Я копирую это, и все ошибки пропадают. ошибочно я предполагаю, что мой C# VS 2017 позаботится о нем.
Сегодня все работает нормально.

Спасибо, что уделили мне время.

Лучшие Регарады

НОГА

Patrice T

Разместите это как решение и примите его, просто чтобы сказать, что вопрос решен и закрыть его.

Patrice T

Попробуйте перечислить сообщения об ошибках и позиции.

BillWoodruff

Опишите ошибки, и где они происходят. Прокомментируйте свой код.

Member 14053198

Большое спасибо Биллу Вудраффу.

К счастью, я нашел ошибку. Я забыл скопировать "с помощью SystemCollections.Общий;" Я копирую это, и все ошибки пропадают. ошибочно я предполагаю, что мой C# VS 2017 позаботится о нем.
Сегодня все работает нормально.

Спасибо, что уделили мне время.

Лучшие Регарады

НОГА

1 Ответов

Рейтинг:
0

BillWoodruff

Я предлагаю вам изучить Обсуждение и несколько примеров кода в этой теме: "поиск всех циклов в неориентированных графах:" [^]