На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Графы, матрица смежности , Матрица смежности считывается из файла, обход графа в глубину
    Матрица смежности считывается из файла, далее обход графа в глубину.
    Помогите исправить вывод, чтобы было так:

    Из города 1 можно добраться в города: ..., ...
    Из города 2 можно добраться в города: ..., ... и т.д.

    Если пути нет, то

    Из города 3 нельзя добраться в другие города.

    ExpandedWrap disabled
      #include <stdio.h>
      #include <cstdlib>
      #include <iostream>
      #include <locale.h>
      #define N 6
       
      using namespace std;
       
      int matrix[N][N],P[N]={0,0,0,0,0,0}, c=0;
       
      int next (int i, int cur)
      {
          cur++;
          while (cur<N && !matrix[i][cur]) cur++;
          if (cur<N) return cur;
          return -1;
      }
       
      void DFSR (int x)
      {
          int y;
       
          P[x] = ++c; //помещаем вершину в путь
          y = next (x, -1);
          while (y != -1)  //пока есть смежные вершины
          {
              if (!P[y])   //если вершины еще нет в пути
                  DFSR (y);       //продолжаем с нее обход
              y = next (x, y); //переходим к следующей вершине
          }
      }
       
      int main(int argc, char ** argv) {
       
          setlocale (LC_ALL, "Russian");
       
          int matrix[N][N];
          int i, j;
       
          char FileName[256];
          FILE *inp;
       
          cout << "Введите имя файла: ";
          cin >> FileName;
       
       
          if ((inp=fopen(FileName,"r")) == NULL)
            {
              cout << "Ошибка, данного файла не существует" << endl;
              return -1;
            }
          else
       
          cout<< "\n" <<endl;
          cout<< "Матрица смежности" <<endl;
          cout<< "_________________\n" <<endl;
       
          for(i = 0; i < N && !feof(inp); i++) {
              for(j = 0; j < N && !feof(inp); j++) {
                  fscanf(inp, "%d", &matrix[i][j]);
                  printf("%d ", matrix[i][j]);
              }
              putchar('\n');
       
          }
           cout<< "\n" <<endl;
       
           cout<< "Определить из каждого ли города можно попасть в остальные." <<endl;
           cout<< "__________________________________________________________\n" <<endl;
       
           int x;
           for (x=0; x<N; x++)
              if (P[x]==0) DFSR(x);
       
              for (x=0; x<N; x++)
              {
                  cout << "Из города " << x+1 << " можно попасть в города:" <<endl;
                  for (i=0; i<N; i++){
                          for (j=0; j<N; j++){
                                  if ((matrix[i][j]==1)&&(matrix[j][i]==1)){
                                      cout << i+1 << " "<<endl;
                                      i++;
                                  }
                          }
                  }
              }
          fclose(inp);
          return (0);
      } :wacko:
      Masha1, так а нужно-то что c этим кодом сделать?
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0178 ]   [ 16 queries used ]   [ Generated: 25.04.24, 01:03 GMT ]