2013-11-13 7 views
0

Так что у меня есть график, который считываетЧтение на графике в C?

6 7 
1 2 -2 
2 3 -1 
3 1 -4 
3 4 -2 
3 5 -3 
6 4 -1 
6 5 -4 

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

Вопрос в том, как бы я прочитал края и вес этого графа, не указав количество узлов (или ничего) в первой строке. Например, как бы я прочитал на этом графике то же самое ...

1 4 -4 
2 3 3 
1 2 -2 
3 4 -2 
2 1 1 

Спасибо!

Here is my current code 

FILE *fin = fopen(argv[1], "r"); 
     fscanf(fin, "%d", &n); 
     e = 0; 

     for (i = 0; i < n; ++i) 
      for (j = 0; j < n; ++j) { 
       fscanf(fin, "%d", &w); 
       if (w != 0) { 
        edges[e].u = i; 
        edges[e].v = j; 
        edges[e].w = w; 
        ++e; 
       } 
      } 
+2

Не могли бы вы просто прочитать до конца файла? –

+0

Как вы сейчас читаете строки? I.e., после того, как вы прочтете эту первую строку, как вы потребляете оставшиеся строки? –

+0

Извините, я не могу правильно это отформатировать. Прямо сейчас у меня есть 'FILE * fin = fopen (argv [1]," r "); fscanf (плавника, "% d", &n); е = 0; для (я = 0; <п; ++ я) для (J = 0, J Corey

ответ

0

Вы должны создать связанный список, который динамически растет с каждым добавленным узлом и продолжит работу до конца файла. Многие звонки в malloc сделают это. Если вы не покажете, как вы сейчас читаете данные, и какова ваша структура данных, сложно дать вам более подробный ответ.

0

Зависит от реализации графика и если вы можете динамически вставлять узлы. Для каждой строки прочитайте два узла, и если один или оба в настоящее время не существуют в вашем графике, вам нужно будет вставить их, а затем вставить ребро. Если вы используете матричное представление, вам нужно будет постоянно изменять размер и копировать матрицу (плохо). Если вы используете представление списка или очереди, вам нужно пройти через каждый узел, чтобы увидеть, была ли она вставлена ​​уже для каждой новой строки (плохая, но менее плохая). Это немного лучше с упорядоченным списком, так как вы можете просто остановиться и вставить всякий раз, когда вы попадаете на узел с более высоким номером. Эта реализация также не требует, чтобы узлы были последовательно названы (например, граф с именами узлов 1, 2, 5, 19, 20202, 20203, ...)

 Смежные вопросы

  • Нет связанных вопросов^_^