С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/55: Рейтинг темы: голосов - 55, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 75
1

Список кортежей

15.09.2019, 08:57. Показов 10964. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Пишу программу обхода в глубину графа на C#
Заранее прошу не ругаться на мою тупость)
Для начала я создал список кортежей

C#
1
List<Tuple<int, int, bool>> mark = new List<Tuple<int, int, bool>>(); //Здесь у меня хранятся помеченные смежные вершины
В самом методе я в самом начале добавляю в этот кортеж помеченные вершины, для этого я ввожу с какой вершины начинать

Проблема в том, что не получается сделать проверку на то, был ли я в неких двух смежных вершинах или нет

C#
1
2
3
4
5
if (mark[i] == false) //Тут выскакивает ошибка о том, что нельзя применить "==" к операнду типа Tuple<int,int,bool>
{
        DFS();
        path.Pop(); //удаляем исследованные вершины
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2019, 08:57
Ответы с готовыми решениями:

Равенство кортежей
Добрый день! Я пишу простенькую консольную игру в качестве семестровой работы. Файл с проектом...

Нет кортежей
NET 6.1, C# 7.3, но при попытке написать в методе (int, int) tuple = (5, 10); ошибка В чем...

Сортировка кортежей
Здравствуйте. Есть List&lt;Tuple&lt;string, float&gt;&gt;, содержащий некоторое количество пар кортежей с...

Как работает сравнение кортежей?
using System; namespace ConsoleApp1 { class Program { static void...

8
95 / 74 / 27
Регистрация: 13.08.2018
Сообщений: 203
15.09.2019, 09:08 2
C#
1
if (mark[i].Item3 == false)
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 75
15.09.2019, 09:53  [ТС] 3
Понял, спасибо

Добавлено через 6 минут
Извините, а не подскажите как быть, если к примеру у меня есть словарь
C#
1
Dictionary<Edge,bool> mark = new Dictionary<Edge,bool>
Edge это класс где у меня хранятся смежные вершины, а также вес ребра, которому они инцидентны

C#
1
2
3
4
5
6
class Edge
{
public int v1;
public int v2;
public double Weight;
}
0
1480 / 935 / 454
Регистрация: 06.02.2012
Сообщений: 2,862
15.09.2019, 12:31 4
Цитата Сообщение от Rashad1337 Посмотреть сообщение
Извините, а не подскажите как быть, если к примеру у меня есть словарь
Что именно подсказать, конкретнее...
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 75
15.09.2019, 12:48  [ТС] 5
Вот я решил сделать сейчас все это через словарь, то есть
C#
1
public Dictionary<Edge, bool> mark = new Dictionary<Edge, bool>();
Как добавить мне сейчас в этот словарь объекты? я пытался написать так:
C#
1
mark.Add(edges[startVertex],true);
Но у меня выскакивает ошибка о том, что индекс находится за пределами границ, то есть список пустой, я так думаю

Добавлено через 1 минуту
startVertex это переменная в которую мы вводим с какого индекса списка смежных вершин начать поиск
0
1480 / 935 / 454
Регистрация: 06.02.2012
Сообщений: 2,862
15.09.2019, 12:54 6
Цитата Сообщение от Rashad1337 Посмотреть сообщение
что индекс находится за пределами границ
Значит что, при разборе вашего массива вот здесь,
C#
1
edges[startVertex]
размер цикла больше чем коллекция edges
Нужно учитывать размер.
C#
1
2
3
4
for(int startVertex =0; startVertex < edges.Lenght; startVertex++)
{
   mark.Add(edges[startVertex],true);
}
Но это если edges является массивом.
Если же коллекцией List то тогда нужно использовать
C#
1
2
3
4
for(int startVertex =0; startVertex < edges.Count; startVertex++)
{
   mark.Add(edges[startVertex],true);
}
Добавлено через 2 минуты
Цитата Сообщение от Rashad1337 Посмотреть сообщение
startVertex это переменная в которую мы вводим с какого индекса списка смежных вершин начать поиск
Значит вы пытаетесь ввести значение больше чем сама коллекция, или же в ваша коллекция на этапе работы не имеет данных.
0
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 75
15.09.2019, 13:45  [ТС] 7
А понял, то есть получается через цикл надо постоянно добавлять.

А разве если по циклу добавлять и давать значение true, получится , что он все смежные вершины пометитДобавлено через 47 минут
и еще в самом цикле я делаю проверку на пометку вершин, то есть
C#
1
2
if(edges[startVertex) == true)
       return;
Но появляется ошибка о том, что не удается преобразовать int в Edge
0
1480 / 935 / 454
Регистрация: 06.02.2012
Сообщений: 2,862
15.09.2019, 15:05 8
Цитата Сообщение от Rashad1337 Посмотреть сообщение
то есть получается через цикл надо постоянно добавлять
Нет, вы меня неправильно поняли. Я показал пример. Я незнаю каким макаром у вас создается массив edges.
Если вам в ходе программы нужно добавить новый экземпляр edges, то ради бога добавляете.
Заполняем коллекцию.
C#
1
2
mark.Add(new Edge(){ v1 = 1, v2 =1 ......}, true);
mark.Add(new Edge(){ v1 = 2, v2 =2 ......}, true);
или же так
C#
1
Edge [] edge = new Edge[] {new Edge(){v1 = 1, v2 =1}, new Edge(){v1 = 1, v2 =1} //и.т.д...... };
Тогда можно будет обращаться по индексу
C#
1
mark.Add(edges[startVertex],true);
Если вы хотите работать по индексу, то лучше использовать в качестве ключа не класс edges, а сам индекс т.е что то типа такого
C#
1
2
3
4
5
6
7
8
9
10
Dictionary<int, Tuple<Edge, bool>> dicEdge = new Dictionary<int, Tuple<Edge, bool>>();
Tuple<Edge, bool> tupleEdge = new Tuple<Edge, bool>(new Edge(){ v1 = 1, v2 =1 ......}, true );
//Добавляем в словарь
dicEdge.Add(0, tupleEdge);
 
 
//Получаем из словаря
Tuple<Edge, bool> getTupleEdge = dicEdge[Указываем индекс];
Edge edge = getTupleEdge.Item1;
bool status = getTupleEdge.Item2;
Цитата Сообщение от Rashad1337 Посмотреть сообщение
Но появляется ошибка о том, что не удается преобразовать int в Edge
Скобку пропустили if(edges[startVertex]) сам класс у вас не может проверяться на логический оператор
1
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 75
15.09.2019, 16:27  [ТС] 9
Понял, спасибо большое!
0
15.09.2019, 16:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2019, 16:27
Помогаю со студенческими работами здесь

Использование кортежей (Tuple) в качестве параметров: Create or new?
Всем привет! Относительно недавно начал изучать азы С#, дойдя до кортежей столкнулся с дилеммой на...

Реализую класс, обрабатывающий информация о графе (которая хранится в виде кортежей)
Информация о системе хранится следующим образом: Пусть имеем список направлений: начальный город,...

Разделить исходный список на два списка: список чисел из диапазона [a,b] и список чисел не из заданного диапазона
Создайте приложение, которое разделит исходный список из вещественных чисел на два списка: список...

Из двух случайных кортежей сделать список объединения и список прямого произведения
Задача 2. Напишите программу, которая из двух случайных кортежей длины 5 и 4, например, ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru