кратчайший путь для всех пар

#c #graph-theory

#c #теория графов

Вопрос:

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

Вот код:

 #include <iostream>
#include <conio.h>

using namespace std;

int Min(int a,int b){
    return a<=b? a:b;
}

int cost[10][10],a[10][10],i,j,k,c;

int main(){

    int n,m;
    cout<<"enter number of vertices "<<endl;
    cin>>n;
    cout<<"enter number of edges "<<endl;
    cin>>m;
    for (k=1;k<=m;k  )
    {
        cin>>i>>j>>c;
        a[i][j]=cost[i][j]=c;
    }

    for ( i=1;i<=n;i  ){
        for ( j=1;j<m;j  ){
            if (a[i][j]==0 amp;amp; i!=j)
                a[i][j]=40000;
        }
    }

    for (k=1;k<=n;k  )
        for (i=1;i<=n;i  )
            for( j=1;j<=n;j  )
                a[i][j]=min(a[i][j],a[i][k] a[k][j]);

    cout<<" resultant adj matrix n";
    for (i=1;j<=n;j  ){
        for (j=1;i<=n;i  ){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }

    return 0;
}
  

Ответ №1:

У вас есть некоторые опечатки: последние циклы должны выглядеть следующим образом:

  for (i=1;i<=n;i  ){
     for (j=1;j<=n;j  ){
  

Комментарии:

1. можете ли вы указать, что не работает? Печать выходных данных?

2. с этими изменениями выводится: введите количество вершин 2 введите количество ребер 2 3 4 5 6 4 3 результирующая матрица adj 0 0 40000 0

3. Он выводит что-то вроде этого: результирующая матрица adj 0 40000 40000 40000 0 40000 40000 40000 0

4.1 2 4 2 1 6 1 3 11 3 1 3 2 3 2

5. с этим массивом (двумерным) ничего

Ответ №2:

Просто исправьте опечатки в своих циклах, особенно здесь:

 cout<<" resultant adj matrix n";
for (i=1;i<=n;i  ){
  for (j=1;j<=m;j  ){
    cout<<a[i][j]<<" ";
  }
cout<<endl;
}
  

Ответ №3:

 import java.util.*;
class Main{
    static int min(int a,int b)
    {
      if(a<b)
        return a;
      else
        return b;
    }
    public static void main(String args[])
    {
      int n,i,j,k;
      Scanner sc=new Scanner(System.in);
      System.out.println("Enter the number of nodes :- ");
      n=sc.nextInt();
      int t=n;
      int mat[][]=new int[n 1][n 1];
      System.out.println("Consider 5000 as infinity :- ");
      System.out.println("Enter the values of adjacency matrix :- ");
      for(i=1;i<=n;i  )
      {
        for(j=1;j<=n;j  )
        {
          mat[i][j]=sc.nextInt();
        }
      }
      System.out.println("MAT0" " = ");
      for(i=1;i<=n;i  )
      {
        for(j=1;j<=n;j  )
        {
          System.out.print(mat[i][j] " ");
        }
        System.out.print("n");
      }
      for(k=1;k<=n;k  )
      {
        for(i=1;i<=n;i  )
        {
          for(j=1;j<=n;j  )
          {
            mat[i][j]=min(mat[i][j],mat[i][k] mat[k][j]);
          }
        }
        System.out.println("MAT" k " = ");
        for(i=1;i<=n;i  )
        {
          for(j=1;j<=n;j  )
          {
            System.out.print(mat[i][j] " ");
          }
          System.out.print("n");
        }
     }
   }
}
  

Комментарии:

1. Вопрос касается C , этот ответ — нет.