Чтение списка смежности из файла - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно прочитать из списка исправлений файлов для алгоритма Крускала.Входной файл

9 17
2 3 8 4 9 8
1 3 3 6 4 5 9 6
2 6 4 4 9 1
2 5 3 4 5 3 9 2
4 3 6 1 9 5
5 1 7 5 9 2
6 5 8 4 9 2
1 4 7 4 9 2
1 8 2 6 3 1 4 2 5 5 6 2 7 2 8 2

Позвольте мне объяснить, как это выглядит.Первый ряд - это, очевидно, количество вершин и ребер.Каждая следующая строка означает одну вершину, поэтому второстепенная строка является первой вершиной и содержит вершину, с которой она будет соединяться, и вес ребра.И ниже приведен пример в первой строке.

Vertex 1[Source]: 2[Destination] 3[Weight of the edge] 8[Destination] 4[Weight] 9[Destination] 8[Weight]

И мне нужно хранить ребра в массиве

typedef struct Edge{
int weight;
int beg, end;
}*PEdge;

И проблема в том, что я понятия не имею, как прочитать его в массив.Я придумал что-то подобное, но, очевидно, это не сработало.

    in.open("In0303.txt");
out.open("Out0303.txt");
if(!in || !out)
return 0;
in>>n>>m;
Edge E[34];
while (! in.eof() ){
getline( in, line );
istringstream is( line );
while( is >> number ) {
edge++;
E[edge].beg=row;
E[edge].end=number;
E[edge].weight=number;
}
row++;
}

1 Ответ

0 голосов
/ 20 ноября 2018

Это звучит как у вас проблемы с чтением двух чисел одновременно (вес и пункт назначения).Готовы ли вы взорвать свой ум? Вы можете связать оператор ввода!

Это означает, что вы можете сделать:

int dest, weight;
while( is >> dest >> weight ) {
    edge++;
    E[edge].beg = row;
    E[edge].end = dest;
    E[edge].weight = weight;
}
...