Мой отчёт по лабе 3
.docxМинистерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
Высшего профессионального образования
Уфимский государственный авиационный технический университет
Кафедра ВМиК
Отчёт
по лабораторной работе
«Алгоритм поиска в глубину в графе»
Выполнила: студ. гр. МО-201
Фатхутдинова Л.М.
Проверила:
Верхотурова Г.Н.
Уфа - 2012
Постановка задачи
Реализовать алгоритм «поиск в глубину» в неориентированном невзвешенном графе.
Входные и выходные данные
Рассмотрим входные и выходные данные, используемые в программе:
-
list – список вершин графа.
-
dataGridView1 – матрица смежности.
-
stk – стек, используемый для хранения смежных вершин при поиске в глубину и при поиске эйлерова цикла.
-
lst – список, используемый для хранения результата.
Алгоритм поиска в глубину
1. Помещаем начальную вершину в стек
2. Начинаем итерационный процесс, на каждом шаге которого выталкиваем вершину из стека и обрабатываем ее.
2.1. Выталкиваем вершину из стека
2.2. Проверяем по списку, была ли она обработана. Если нет – проводим обработку этой вершины: включаем ее в список, чтобы избежать повторной обработки, и помещаем в стек все смежные с ней вершины, которых еще нет в списке.
Процесс завершается, когда стек становится пустым. Список будет содержать список обработанных вершин.
Реализация
private void button2_Click(object sender, EventArgs e) // в глубину
{
lst.Clear(); //список для обработанных вершин stk.Push(1);// стек для смежных вершин,нач вершину в стек
int tmpp = 0;
// итерац.процесс прохода по всем вершинам
for (int j = 1; j < list.CList.Count + 1; j++) {
tmpp = 0;
if (stk.Count > 0)
{
// выталкиваем вершину из стека и обабатываем её
int n = stk.Pop();
if (n != 0)
{
// была ли обработана вершина
if (lst.Contains(n))
tmpp = 1;
if (tmpp != 1)
{
textBox1.Text = textBox1.Text + n.ToString() + ' ';
lst.Add(n);
// tmp = 0;
}
for (int i = list.CList.Count - 1; i >= 0; i--)
{
if (this.dataGridView1.Rows[n - 1].Cells[i].Value != null) {
bool flg = true;
string k = this.dataGridView1.Rows[n - 1].Cells[i].Value.ToString();
int l = 1;
if (k == l.ToString())
{
if (lst.Contains(i + 1))
flg = false;
// если нет - добавляем вершину в стек
if (flg == true) {
stk.Push(i + 1);
}
}
}
}
}
}
}
}
Оценка сложности
Вывод
В ходе лабораторной работы я познакомилась с такими понятиями как неориентированный граф, матрица смежности, стек, поиск в глубину. Также научилась применять их для решения задач.