Чтение списка смежности орграфа из текстового файла в Stack Overflow

У меня есть текстовый файл, который имеет некоторое количество целых чисел в каждой строке. Пример:

1 2 4
3
0 4

2 3

Здесь 1-я строка означает, что 1-й узел подключен к узлам с номерами 1, 2 и 5. Пустая строка означает, что 4-й узел не подключен ни к какому узлу.

Это дает мне ориентированный граф.
Это ТАК вопрос может быть полезным, но предполагается, что каждая строка имеет 2 целых числа, тогда как в этом случае она может иметь любое количество целых чисел от 0 до N-1 (N — это количество узлов).

я просто хочу знать как читать этот текстовый файл. Если бы у меня было два целых числа в строке, я мог бы сделать infile >> a >> b. Как узнать, что «\ n» или конец строки произошел.
я не просить код, который делает ориентированный граф.

-3

Решение

Принятый ответ от связанный вопрос уже показано, как читать строку за строкой, что вам нужно сделать для своего кода, а первая часть показывает цикл, как читать все числа из вашей строки (istringstream). Поскольку у вас нет фиксированного количества записей, вы можете сохранить их в std :: vector.

1

Другие решения

Я не думаю, что это домашнее задание, поскольку актуальной темой являются орграфы.

Поэтому некоторый код. Но вы должны сами обрабатывать ошибки.

#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>

typedef std::vector<int> nl_t;
typedef std::vector<nl_t> nll_t;

int main()
{
std::ifstream is("test.dat");
std::string str;

nll_t nll;

while(std::getline(is,str)) {
std::istringstream ss(str);
nl_t nl;
int i;

while(ss >> i) {
nl.push_back(i);
}
nll.push_back(nl);
}
}
/**
Local Variables:
compile-command: "g++ -g test.cc -o test.exe; ./test.exe"End:
*/
1

Перейдите по этой ссылке
http://www.c-plusplus.de/forum/p1940874#1940874.
Достаточно прочитать код. Нет необходимости понимать немецкий текст.

В вашем случае вы должны изменить строку 18 основной программы с while( datei >> ws ) в while( datei ) и удалите строки 23 и 24. Потому что в Вашем случае пустая строка — это информация.

Или ваш главный может выглядеть так:

ifstream file("input.txt");
if( !file.is_open() )
{
cerr << ">Error by opening the file\n";
return -2;
}
for( int node1 = 1; file.good(); ++node1 )
{
for( int node2; !is_endl(file) && file >> node2; )
cout << "Node " << node1 << " is connected with " << node2 << endl;
}
0
По вопросам рекламы [email protected]