Код глубины поиска первый ничего не печатает - PullRequest
0 голосов
/ 02 июля 2018

Мне дано задание напечатать последовательность вершин в DFS. Я не вижу ничего плохого в моем коде, но он ничего не печатает.

Ниже показано, как должен быть вывод.

Input   Output
6      Vertex 1 is visited
1 4    Vertex 4 is visited
1 6    Vertex 2 is visited
2 4    Vertex 5 is visited
2 5    Vertex 6 is visited
2 6    Vertex 3 is visited
3 4 

Первые 6 здесь - это количество вершин.

Вот мой фрагмент кода:

#include <stdio.h>
#include <string.h>
#define MAX 100

int m[MAX][MAX], used[MAX];
int i, n, a, b;

void dfs(int v)
{
  int i;
  // Mark the vertex that is visited
  used[v] = 1;
  printf("Vertex %d is visited\n",v);

  // looking for an edge, through which you can get to the vertex that is not visited 

  for(i = 1; i <= n; i++)
    if (m[v][i] && !used[i]) dfs(i);
}

int main(void)
{


  // read input data
  scanf("%d",&n);
  while(scanf("%d %d",&a,&b) == 2)
    m[a][b] = m[b][a] = 1;

  //run dfs from the top 1
  dfs(1);

  return 0;
}

1 Ответ

0 голосов
/ 02 июля 2018

Нет условия выхода для вашего цикла while. scanf просто ждет следующих 2 номеров. Вы должны изменить его, чтобы, закончив ввод вершин, вы продолжили. Как это:

while(scanf("%d %d", &a, &b)) {

    if(a == -1) break;

    m[a][b] = m[b][a] = 1;
}

Когда вы вводите -1 и что-то еще, вы выходите из цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...