Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 16.06.2010, 12:06   #11
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

ооо просто огромное спасибо так намного понятнее извиняй что отзыв поставить не могу
Alex_sim вне форума Ответить с цитированием
Старый 16.06.2010, 12:57   #12
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

если можно еще вот такой вопрос а как по какому правилу нужно заполнять матрицу смежности т.е. как раставлять 1-ки т.е. ребра??
Alex_sim вне форума Ответить с цитированием
Старый 16.06.2010, 13:17   #13
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,538
По умолчанию

Если из вершины x идёт линия в вершину y, значит в строке x, столбце y матрицы ставим 1, иначе - 0.
pu4koff вне форума Ответить с цитированием
Старый 16.06.2010, 13:37   #14
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

можешь в коде показать?
Alex_sim вне форума Ответить с цитированием
Старый 16.06.2010, 13:39   #15
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,538
По умолчанию

Цитата:
Сообщение от Alex_sim Посмотреть сообщение
можешь в коде показать?
Тут зависит от исходных данных. Как программа узнаёт о том, какие вершины связаны? Отсюда и нужно плясать. Ну а в коде две вершины связать, это просто:
Код:
МатрицаСмежности[x,y] = 1;
pu4koff вне форума Ответить с цитированием
Старый 16.06.2010, 13:42   #16
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

вот меня и интересует как узнать что вершины связаны,
но по моему условию получается что каждая вершина связана
т.е получается можно сделать так если разные то 1 иначе 0
верно не верно я думаю?
Alex_sim вне форума Ответить с цитированием
Старый 16.06.2010, 13:45   #17
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,538
По умолчанию

Если все вершины связаны между собой, то тут и мудрить нечего с матрицами.
Код:
...
for (int i = 0; i < 10; ++i)
{
  for (int j = i + 1; j < 10; ++j)
  {
    НарисоватьСвязь(Вершины[i], Вершины[j])
  }
}
pu4koff вне форума Ответить с цитированием
Старый 16.06.2010, 14:08   #18
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

Вот я хочу у тебя спросить правильно ли я понял условие задачи
Построить карту метро по имеющимся "транзакциям" (поездкам пассажиров), по-моему, не сложно. Есть, например, поездки:

Соборная площадь-Яблонька-Транспортный-ЖД Вокзал
Кордный-Лизы Чайкиной-Транспортный
Икея-11 микрорайон-Соборная площадь
Яблонька-Соборная площадь-Водники-СибАДА-Сов исполком

считываем файл, строим словарь станций, затем определяем их количество, заводим матрицу смежности, читаем файл заново и расставляем рёбра.

Вот у меня вопрос как правильно заполнить матрицу смежности?
Alex_sim вне форума Ответить с цитированием
Старый 16.06.2010, 14:30   #19
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

как в моем случае правильно заполнить Матрицу смежности
Alex_sim вне форума Ответить с цитированием
Старый 16.06.2010, 14:35   #20
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,538
По умолчанию

Изначально матрицу заполняем нулями (ну или false, если берем булеву матрицу, а не int. Для данной задачи достаточно типа bool, т.к. время поездки между станциями не учитывается)
Возьмем для примера маршрут:
Кордный-Лизы Чайкиной-Транспортный
Получаем две пары связаных станций:
Кордный-Лизы Чайкиной и Лизы Чайкиной-Транспортный
Прописываем соответственно в коде:

Код:
МатрицаСмежности["Кордный", "Лизы Чайкиной"] = 1;
МатрицаСмежности["Лизы Чайкиной", "Кордный"] = 1;

МатрицаСмежности["Лизы Чайкиной", "Транспортный"] = 1;
МатрицаСмежности["Транспортный", "Лизы Чайкиной"] = 1;
Индексацию по матрице использовал по имени станции для наглядности.
Граф получается неориентированный, поэтому приходится на каждую связь по 2 строки писать. Одна для связи A -> B, а другая - В -> A.

По организации в целом тут нужно думать как лучше сделать. Если решать в лоб, то как-то так:
Код:
// Индексы станций
Dictionary<string, int> indexes;
// Добавление станции:
int AddStation(string name)
{
  // Станция уже есть, возвращаем её индекс
  if (indexes.ContainKey(name))
    return indexes[name];

  int index = indexes.Count; // Индекс новой станции = количество уже добавленных станций

  indexes.Add(name, index); // Добавляем соответствие между станцией и её индексом
}
// Индекс станции
int StationIndex(string name)
{
  return indexes[name];
}

// Добавление связи между двумя станциями
void AddLink(string station1, string station2)
{
  // Определяем индексы станций
  int index1 = StationIndex(station1);
  int index2 = StationIndex(station2);
  // Добавляем связь в матрицу смежности
  МатрицаСмежности[index1, index2] = 1;
  МатрицаСмежности[index2, index1] = 1;
}
pu4koff вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си найти минимальный путь от точки до точки dikr Помощь студентам 4 09.05.2010 11:58
Имеются координаты точки. Как проверить какого цвета соседние точки на форме? Rin Мультимедиа в Delphi 2 10.11.2009 23:47
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
Точки DoGGy Паскаль, Turbo Pascal, PascalABC.NET 11 23.01.2009 20:11
Отбражение чисел - точки, это точки, а не запятые, обозначающие дробную часть Дикий Помощь студентам 7 12.05.2008 17:57