Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 13.03.2018
Сообщений: 16
1

Подскажите по готовому коду

13.10.2018, 01:02. Просмотров 1627. Ответов 4

Здравствуйте, нужна помощь. Нашел псевдокод для реализации мостов на графе:
http://e-maxx.ru/algo/bridge_searching
Собственно реализация кода на 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
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace bridges_console
{
    class Program
    {
        static int n;
        static int[][] Gv;
        static int timer;
        static int[] tin;
        static int[] fup;
        static bool[] mark;
        static StreamWriter W;
        static StreamReader R;
 
        static void Main(string[] args)
        {
            R = new StreamReader("in.txt");
            W = new StreamWriter("out.txt");
            n = int.Parse(R.ReadLine());
            Gv = new int[n + 1][];
            int[] g = new int[n + 1];
            string s;
            string[] As;
            for(int i = 0; i < n; i++)
            {
                s = R.ReadLine();
                As = s.Split();
                int nr = As.Length;
                Gv[i + 1] = new int[nr + 1];
                Gv[i + 1][0] = nr;
                for (int j = 0; j < nr; j++)
                {
                    Gv[i + 1][j + 1] = int.Parse(As[j]);
                }
                mark = new bool[n + 1];
                tin = new int[n + 1];
                fup = new int[n + 1];
                for (i = 0; i < n; i++)
                {
                    mark[i + 1] = false;
                    tin[i + 1] = fup[i + 1] = 0;
                }
 
                find_bridges();
                R.Close();
                W.Close();
            }
        }
        static void dfs_b(int v, int p = -1)
        {
            mark[v] = true;
            tin[v] = fup[v] = timer++;
            for (int i = 1; i < Gv[v][0] + 1; ++i)
            {
                int to = Gv[v][i];
                if (to == p)
                    continue;
                if (mark[to])
                    fup[v] = Math.Min(fup[v], tin[to]);
                else
                {
                    dfs_b(to, v);
                    fup[v] = Math.Min(fup[v], fup[to]);
                    if (fup[to] > tin[v])
                        W.WriteLine("Bridge: (" + v + "," + to + ")");
                }
            }
        }
        static void find_bridges()
        {
            timer = 0;
            for (int i = 1; i <= n; ++i)
                mark[i] = false;
            for (int i = 1; i <= n; ++i)
                if (!mark[i])
                    dfs_b(i);
        }
        //------------------------------
    }
}
Ругается на 59 строку:
C#
1
for (int i = 1; i < Gv[v][0] + 1; ++i)
Подскажите, что здесь не так? На примере таких данных не получается. Как я понял ругается на недоступность ссылаться в массиве с получением v при итерации. Понимаю что нужно именно в этом что-то поменять, а что именно - не знаю

in.txt
6
2 3 4
1 5 6
1 4
1 3
2 6
2 5

out.txt
Bridge: ( 1, 2 )
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2018, 01:02
Ответы с готовыми решениями:

Блок-схема к готовому коду
struct start { public static double Result(famres fm, int i, int j) ...

Нужна блок-схема по готовому коду
Программа готова,исправна и отлично работает! Но для нее еще требуется блок-схема.Увы,в этом я не...

К готовому коду добавить аннотацию/атрибут и исключение
Я создала класс с коллекцией list и отсортировала объекты, по заданию нужно еще добавить класс...

Создайте программу по готовому коду
Здравствуйте. Пробовал сделать программу по готовому коду, но получается не то, что ожидалось,...

4
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
13.10.2018, 10:07 2
Лучший ответ Сообщение было отмечено roma101 как решение

Решение

roma101,
у вас во вложенном цикле используется переменная i из внешнего цикла.

строки 44-53 попробуйте сделать так:
C#
1
2
3
4
5
6
7
8
9
10
                for (int k = 0; k < n; k++)
                {
                    mark[k + 1] = false;
                    tin[k + 1] = fup[k + 1] = 0;
                }
            }
            find_bridges();
            R.Close();
            W.Close();
        }
3
0 / 0 / 0
Регистрация: 13.03.2018
Сообщений: 16
13.10.2018, 13:03  [ТС] 3
griffon88, нет. Сути это не меняет) Попробовал - тоже самое. Проще наверно алгоритм с нуля переписать...
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
13.10.2018, 13:06 4
roma101, я убрал глобальную ошибку, теперь алгоритм хоть как то работает и даже что то выдаёт на выход.
В правильность самого алгоритма и его реализации я не вникал, это уж сами )))

вот на вашем тестовом примере выводится : Bridge: (1,2)
1
0 / 0 / 0
Регистрация: 13.03.2018
Сообщений: 16
13.10.2018, 13:11  [ТС] 5
griffon88, а нет, это я виноват. Действительно это была ошибка, которую я не увидел. Благодарю вас и извиняюсь за предыдущее сообщение. Все работает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2018, 13:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

К готовому коду добавить процедуру
Суммы элементов каждого столбца матрицы X(m,n), имеющих значения в интервале Min…Max. Для столбца....

Блок схема по готовому коду
Помогите пожалуйста составить блок-схему по данному коду:

Составить блок схему к готовому коду
нужно постороить блок схему к этой программе, заранее спасибо. program Mat; const m=20; var...

Составить блок-схему к готовому коду
здравствуйте! помогите, пожалуйста, сделать блок-схему и программу по задаче: Сформировать и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.