//C++ program for Bellman-Ford's source shortest path algorithm.
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <ctime>
#include <stdio.h>
#include <limits.h>
using namespace std;
#define MAXV 999999
void BF(int, int, int**);
void wys(int ,int**);
void wys_BF(int*, int*, int, int);
void wys_BF(int *cost, int *number, int l_ver, int ver_s) // function of display BF algorithm
{
int *S = new int [l_ver];
int sp = 0;
cout << "start: " << ver_s << endl;
cout <<"end: " << " distance: " << "path: " << endl;
for(int i=0; i<l_ver; i++)
{ cout.width(3);
cout << i<< " ";
cout.width(3);
cout << cost[i] <<" ";
for(int x = i; x!=-1; x = number[x])
{
S[sp++] = x;
while(sp)
cout<< S[--sp] << " ";
}
cout << endl;
}
}
void BF(int ver_s, int l_ver,int ** graf)
{
int *cost= new int[l_ver];
int *number= new int[l_ver];
for(int i=0; i<l_ver; i++)
{
number[i] = -1;
cost[i] = MAXV;
}
cost[ver_s]=0;
for(int i=1; i<=l_ver; i++)
{
for(int w=0; w<l_ver; w++)
{
for(int k=0; k<l_ver; k++)
{
if((graf[w][k] !=0) && (cost[k]) >= (cost[w]+ graf[w][k]))
{
cost[k]=cost[w]+graf[w][k];
number[k] =w;
}
}
}
}
wys_BF(cost, number, l_ver, ver_s);
}
void wys(int l_ver, int **graf)
{
for(int j=0; j<l_ver; j++)
{
cout << endl;
for(int k=0; k<l_ver; k++)
cout << setw(3) << graf[j][k];
}
}
// main program
int main()
{
int l_ver = 6;
int ver_s =0;
int **graf;
graf = new int * [l_ver];
for(int i=0; i<l_ver; i++)
graf[i] = new int[l_ver];
int grafnew[6][6]={{0, 1, 0, 0, 0, 0}, //przykładowy graf, działa poprawnie
{0, 0, 0, 5, 9, 0},
{3,-4, 0, 0, 0, 0},
{0, 0, 0, 0, 3, 2},
{0 ,0 ,-1,0, 0,-5},
{9, 0, 8, 0, 0, 0},
};
/* int grafnew[6][6]={{0, 1, 0, 0, 0, 0}, // graf przykładowy tylko z dodatnimi wagami
{0, 0, 0, 5, 9, 0}, // działa poprawnie
{3, 4, 0, 0, 0, 0},
{0, 0, 0, 0, 3, 2},
{0 ,0 , 1,0, 0, 5},
{9, 0, 8, 0, 0, 0},
}
*/
for(int a=0; a<l_ver; a++)
{
for(int b=0; b<l_ver; b++)
{
graf[a][b] = grafnew[a][b];
}
}
BF(ver_s, l_ver,graf);
cout<<"przykladowy graf uzyty w algorytmie:";
wys(l_ver, graf);
cout << endl;
return 0;
}
Jakby któs pomógł wybrac ok 15 linii najwazniejszych w tym kodzie Bellmana-Forda. I w kilku zdaniach uzasadnic dlaczego :D Z góry dziękuję