Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Теория графов, список смежности 
:(
    Опции темы
ДобренькийПапаша
Дата 19.10.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Вот я содрал с учебника программу, это программа, которая представляет граф в виде списка смежности. граф задан списком рёбер, который находится в файле.
После набора кода ошибок нету, файл читается, но прога не работает. Может я в файле просто что-то не то набираю, ибо неособо понял, что мы должны задать в файле. Подскажите, пожалуйста. 
Я функции input в с++ никогда не видел, может это для борланда, хотя компилится вроде. объясните как этот input работает...типа также как "cin>>"? 
И что значит input.eof() в 17-й строке?
Код

#include <fstream.h>

int main()
{
    int **Graf,i,j,pos,N;
    ifstream input("Graf.txt");
    input>>N;
    Graf=new int*[N];
    for(i=0; i<N; i++)
    {
        Graf[i]=new int[2];
    }
    for(i=0; i<2; i++)
        for(j=0; j<N; j++)
            Graf[i][j]=0;
        pos=0;
        while(!input.eof())
        {
            input>>i>>j;
            Graf[0][pos]=i;
            Graf[1][pos]=j;
            pos++;
        }
        return 0;
}


Это сообщение отредактировал(а) ДобренькийПапаша - 19.10.2006, 18:04


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Rockie
Дата 19.10.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(ДобренькийПапаша @  19.10.2006,  18:01 Найти цитируемый пост)
Вот я содрал с учебника программу
и в каком учебнике такое пишут? smile 

Цитата(ДобренькийПапаша @  19.10.2006,  18:01 Найти цитируемый пост)
Может я в файле просто что-то не то набираю, ибо неособо понял, что мы должны задать в файле. 
да, у меня тоже такое предположение  smile 

Код
#include <fstream.h>

int main()
{
    int **Graf,i,j,pos,N;
    ifstream input("Graf.txt"); // входной поток (файл Graf.txt)
    input>>N;                      // N - кол-во вершин графа, считывание из файла
    Graf=new int*[N];         // выделяется память для N строк(если так сказать)
    for(i=0; i<N; i++)
    {                                   // скобки не нужны
        Graf[i]=new int[2];    // выделяется память для 2 столбцов
    }
    for(i=0; i<2; i++)           
        for(j=0; j<N; j++)
            Graf[i][j]=0;          // здесь словится исключение, возможно нужно поменять  
        pos=0;                      // местами N и 2, а возможно поменять местами выше..
        while(!input.eof())    // пока не конец файла
        {
            input>>i>>j;        // почему не читать сразу в массив:  input>>Graf[0][pos] и тд
            Graf[0][pos]=i;    
            Graf[1][pos]=j;
            pos++;
        }
        return 0;
}

Возможно стоит для начала получить представление о списке смежности, к примеру поискать. 
p.s.:Неужто в книжке не описан формат входного файла?


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
ДобренькийПапаша
Дата 19.10.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



книжка называется "С++ освой на примерах" автор:Максим Динман. Когда читал в магазине понравилась, тут вначале предлагется борланд С++, но я просто подумал, что мой Visual C++ 6.0 тоже всё это держит.
Да, формат входного файла не описан, а разве когда прописываем 
while(!input.eof()) будет читаться более одной строки во входном файле, мне кажется прочитается тока первая строка. Не так давно прогал что-то с входными файлами, так там целая морока с getline, построчное считывание ну и всё такое, здесь же я ничего такого не увидел, чем был удивлён.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Rockie
Дата 19.10.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(ДобренькийПапаша @  19.10.2006,  18:56 Найти цитируемый пост)
 а разве когда прописываем while(!input.eof()) будет читаться более одной строки во входном файле
будет
ну что сказать.. почитай про работу с файлами в C++. 
Цитата(ДобренькийПапаша @  19.10.2006,  18:01 Найти цитируемый пост)
типа также как "cin>>"? 
Ну да.
Код
cin>>i>>j;
 - ввод с клавиатуры
Код
input>>i>>j;
 - ввод из файла



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
ДобренькийПапаша
Дата 19.10.2006, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



Читать читал, причём всё раньше у меня работало. Что такое матрица смежности и список смежности тоже прекрасно понимаю. Тут в комментах написано, что типа в проге считывается количество вершин в графе, а вот интересно как прога поймёт где рёбра(пары чисел) графа. Чёта тут ошибочка у них какая-то. Ну по крайней мере автору явно надо было позаботиться о том, чтобы привести пример входного файла!

Вот граф представленный в виде матрицы смежности:

   012345
0 011001
1 100000
2 100100
3 001010
4 000101
5 100010

там где рёбра(пары чисел, то в матрице единица, как видно она симметричная)
список смежности в этом случае:

0125
10
203
324
435
504

в списке смежности нет симметрии, так проще. тут нет (1,0; 0,1), ибо и так ясно, что рёбра попарные в данном случае. Вот.



--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Rockie
Дата 19.10.2006, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(ДобренькийПапаша @  19.10.2006,  19:13 Найти цитируемый пост)
там где рёбра(пары чисел, то в матрице единица, как видно она симметричная)список смежности в этом случае:

Да где видно, что она симметричная? Симметричной она будет лишь при условии что все дуги - это петли.
imho список смежности описывает ориентированный граф и содержит столько строк, сколько вершин и выглядит к примеру так:

0    1  2 3
1    0
2    0  3
3    пустое множество (-1 к примеру) 

Это значит что от нулевой вершины идут дуги к первой, второй и третьей, от первой -  к нулевой, из 3-ей дуги не выходят.

p.s.: можешь поставить сам условие и написать свою программу


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
ДобренькийПапаша
Дата 19.10.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



список смежности как раз описывает неориентированные графы. В той матрицы действительно везде петли, приглядись, единичная матрица симметрична. ориентированным граф называется в том случае если связь между вершинами ОДНОНАПРАВЛЕННАЯ!

так что ты перепутал. Но суть-то не в этом, я не пойму как прогу написатьsmile
Может придут попозже профи и объяснят как сделать...


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Rockie
Дата 19.10.2006, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



imho трудно понять "как прогу написать", не обладая при этом минимальными теоретическим знаниями.  smile 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
ДобренькийПапаша
Дата 20.10.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: нет
Всего: 7



я уже сказал, что обладаю достаточными теоретическими знаниями, однако, на мой взгляд, для написания этой проги понадобится вышеизложенный код существенно  расширить, для того, чтобы компиллятор мог воспринимать кол-во вершин и рёбер.
где первая строка и столбец будут числами от 1 до n а сама матрица единичной для указания рёбер, и тогда прописать это в проге.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.