środa, 5 lipca 2017

Floyd-Warshall algorithm (C++)

#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define max_value 20000
#define min_tab 5
#define max_tab 10
#define min_width 20
#define max_width 200
using namespace std;

int **graph_table;
int size;
int min_Values(int a, int b)
{
if(a<=b)
return a;
else
return b;
}

bool  random_Wrong()
{
  int value;
  value=rand()%10;
  if(value<3)
   return true;
  else
   return false;
}

void init_Values()
{
int i,j,k;
size=min_tab+rand()%(max_tab-min_tab);
graph_table=new int*[size];
for(i=0;i<size;i++)
graph_table[i]=new int[size];
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
 if(random_Wrong())
 {
  graph_table[i][j]=min_width+rand()%(max_width-min_width);
 }
 else
 {
  graph_table[i][j]=max_value;
 }
}
}
}

 int _tmain(int argc, _TCHAR* argv[])
{
  int i,j,k;
  srand(time(NULL));
  init_Values();
  for(i=0;i<size;i++)
for(j=0;j<size;j++)
 for(k=0;k<size;k++)
  graph_table[j][k]=min_Values(graph_table[j][k],graph_table[j][i]+graph_table[i][k]);
  cout<<"Size = "<<size<<endl;
  for(i=0;i<size;i++)
   for(j=0;j<size;j++)
   {
  if(graph_table[i][j]==max_value)
  {
  cout<<i+1<<"*---*>>"<<j+1<<" *is not connect*"<<endl;
  }
  else
if(i!=j)
cout<<i+1<<"*---*>>"<<j+1<<"=="<<graph_table[i][j]<<endl;
   }

  for(i=0;i<size;i++)
   delete[] graph_table[i];
  delete []graph_table;





 getch();
return 0;
}

Brak komentarzy:

Prześlij komentarz