Форум программистов, компьютерный форум CyberForum.ru

Определить планарность графа по матрице смежности - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
a5_necromant
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 5
09.05.2013, 11:59     Определить планарность графа по матрице смежности #1
в общем есть файлы с матрицами смежностей, формат файла прикладыва. (graph1.txt , graph2.txt) В первой строчке указывается количество вершин, далее описываются имена вершин.
Собственно у меня проблема со вводом. Я не могу никак ввести эти графы. Попытки делались, но они привели к неудаче. То что я наваял тоже на всяк лучай приложу, но скорее всего я не правильно это делаю.
Да, и программа должна обработать несколько файлов в процессе работы.
Собственно я не прошу делать за меня все. Проблемы у меня только со вводом данных, по этому меня имнтересует здесь конкретно только ввод, остальное я сам решить попробую....

graph1.txt:
Код
3
A
B
C
0 1 0
1 0 1
0 1 0
graph2.txt:
Код
5
A
B
C
D
F
0 1 1 0 0
1 0 0 1 0
1 0 0 1 0
0 1 1 0 1
0 0 0 1 0
main.txt:
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
#include <iostream>   //планарный граф _ by necromant
#include <fstream>
#include <stdio.h>
#include <cstdlib>
#include <string.h>
 
using namespace std;
 
 
struct grafptype {
        float ver;
        float dug;
    } *grafp;
 
int main()
{
 
    int j,i;
 
    ofstream in("in.in");
    if (!in){
     cout << "PANIC!!!ошибка открытия файла!!!";
     return 1;}
    else {
      //for (int i=1; i < (n+1); i++)
       in >> grafp.ver >> "\n";
       char name[grafp.ver]
        for (int i=1; i < (n+1); i++)
          in >> name[i] >> "\n";
       int tab [grafp.ver][grafp.ver];
        char [grafp.ver];
 
      // in >>
 
        for(int i=0;i<grafp.ver;i++)
         for(int j=0;j<grafp.ver;j++)
          in>>tab[i][j];
 
        for(int i=0;i<grafp.ver;i++)
         for(int j=0;j<grafp.ver;j++)
          if (tab [i][j] == 1) {grafp.dug++; }
    }
    in.close();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 11:59     Определить планарность графа по матрице смежности
Посмотрите здесь:

C++ Матрица/связные_списки смежности для ориентированного графа
заданно матрицу смежности простого графа. Построить каркас этого графа с использованием поиска вширь C++
C++ Определение матрицы смежности графа по заданной матрице инцидентности
Список смежности для графа C++
C++ По заданной квадратной матрице из нулей и единиц определите, может ли данная матрица быть матрицей смежности простого неориентированного графа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 15:05     Определить планарность графа по матрице смежности #2
C++
1
ofstream out("out.txt");
C++
1
ifstream in1("graph1.txt");
C++
1
ifstream in2("graph2.txt");
Выводить всегда out << x;
Считывать из 1-ого и 2-ого файла in1 >> x; in2 >> x;
Файлы должны лежать в проекте, либо рядом с exeшником
a5_necromant
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 5
09.05.2013, 15:16  [ТС]     Определить планарность графа по матрице смежности #3
Дело не в этом. Файлы одновременно мне вводить не надо, нужно в памяти держать только 1 файл. Но дело в том, что считывание информации из файла не проиходит. Тут я чегото накосячил. По этому и прошу помоч ввести.
Текстовые файлы находятся в той же дерриктрории, что и исполняемый файл.
Все равно эта программа не работает. пишет большое колличество ошибок
Я так пологаю, что мой метод ввода крайне неправильный. Я окончательно уже запутался.
Сейчас мне просто нужно ввести данные из этих файлов, чтобы дальше их можно было использовать конктетно в моей задаче
Миниатюры
Определить планарность графа по матрице смежности  
a5_necromant
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 5
09.05.2013, 15:24  [ТС]     Определить планарность графа по матрице смежности #4
Кроме того считать мне нужно не просто подряд все как текст, а отдельно число из первой строки, отдельно массив из наиминований вершин, и отдельно в двумерный массив матрицу смежности....
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 15:30     Определить планарность графа по матрице смежности #5
a5_necromant,
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
#include <iostream>
#include <vector>
#include <cmath>
#include <fstream>
 
using namespace std; 
 
int main(){
    //freopen("input.txt", "rt", stdin); перегрузка консольного ввода вывода, может понравится, но это дополнительно
    //freopen("output.txt", "wt", stdout);
    ifstream in1("graph1.txt");
    int n;
    in1 >> n;
    // считал всю матрицу из in1;
    in1.close();
 
    ifstream in2("graph2.txt");
    in2 >> n;
    // считал всю матрицу из in2;
    in2.close();
 
    ofstream out("output.txt");
    out << "lol-lol";
    // вывел всё что надо
    out.close();
    return 0;
}
a5_necromant
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 5
09.05.2013, 15:49  [ТС]     Определить планарность графа по матрице смежности #6
Ternsip, проблема в том, что матрица не одна хранится в файле
Код
5
A
B
C
D
F
0 1 1 0 0
1 0 0 1 0
1 0 0 1 0
0 1 1 0 1
0 0 0 1 0
и все данные надо учесть, перавя строка хранит информацию о количестве вершин, она крайне важна, потом наиминования вершин, их тоже хорошо ввести.
И матрицу неплохо бы ввести как двумерный массив, например matr[i][j].
тот вариант, что предложили вы введет все в 1 элемент n, и я ничего с данными из файла толком сделать не смогу, кроме как просто обратно их вывести....
А мне, как я писал выше нужно еще провернуть операцию проверки планарности графов, и только после этого сделать вывод. А для проверки мне нужны данные из первой строки и отдельно из матрици смежности, и матрица должна сохранятся как матрица....
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.05.2013, 15:58     Определить планарность графа по матрице смежности #7
a5_necromant, мне очень тяжело понять вашу проблему, вот вам примерчик от меня
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
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
 
using namespace std; 
 
int main(){
    freopen("graph1.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    int n;
    cin >> n;
    vector < vector <int> > gr1(n, vector <int>(n));
    vector < string > vertex_name1(n); 
    for (int i = 0; i < n; i++) {
        cin >> vertex_name1[i];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> gr1[i][j];
        }
    }
    freopen("graph2.txt", "rt", stdin);
    cin >> n;
    vector < vector <int> > gr2(n, vector <int>(n));
    vector < string > vertex_name2(n); 
    for (int i = 0; i < n; i++) {
        cin >> vertex_name2[i];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> gr2[i][j];
        }
    }
    //--------- printing
    for (int i = 0; i < gr1.size(); i++) {
        cout << vertex_name1[i] << " ";
        for (int j = 0; j < gr1[i].size(); j++) {
            cout << gr1[i][j] << " ";
        }
        puts("");
    }
    puts("");
    for (int i = 0; i < gr2.size(); i++) {
        cout << vertex_name2[i] << " ";
        for (int j = 0; j < gr2[i].size(); j++) {
            cout << gr2[i][j] << " ";
        }
        puts("");
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 18:55     Определить планарность графа по матрице смежности
Еще ссылки по теме:

C++ Сгенерировать матрицу смежности полного графа
C++ Написать программу, которая выводит матрицу смежности графа с определенным количеством вершин и ребер
C++ Матрица смежности графа - поиск в глубину

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

Или воспользуйтесь поиском по форуму:
a5_necromant
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 5
09.05.2013, 18:55  [ТС]     Определить планарность графа по матрице смежности #8
Ternsip, vector использовать запрещено, ну ладно, я переписал ввод. Но теперь запускается, но выдает Segmentation fault
вот новый вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    FILE *file;
 
 
    char mas=0;
    file = fopen("fscanf.txt", "r");
 
    while (fscanf (file, "%f", (mas)) != EOF) {
              printf("%.0f\n", mas);
        char name [mas];
        char matr [mas][mas];
 
      for (int i = 0; i < mas; i++) {
              {
                 while (fscanf (file, "%s", (name[i])) != EOF)
                 printf("%s", name[i]);
                   for (int j = 0; j < mas; j++)
                    {
                     while (fscanf (file, "%f", (matr[i][j])) != EOF)
                     printf("%.0f\n", matr);
                    }
              }
            }
Yandex
Объявления
09.05.2013, 18:55     Определить планарность графа по матрице смежности
Ответ Создать тему
Опции темы

Текущее время: 19:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru