
- •Реферат
- •Содержание
- •Введение
- •1 Разработка блок-схемы алгоритмов
- •2 Разработка псевдокода
- •3 Анализ трудоемкости роста функции
- •4 Программа реализации алгоритмов
- •5 Тестирование программ реализации алгоритмов
- •5.1 Тестирование правильности
- •5.2 Анализ по времени
- •6 Анализ результатов
- •Заключение
- •Список использованных источников
- •Код программы по алгоритму Флойда
- •Код программы по алгоритму Беллмана-Форда
Код программы по алгоритму Флойда
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <time.h>
using namespace std;
void main()
{
FILE *f = fopen("algF.txt","r");
const int inf = 1000000;
char ch = 0;
int count = 0, i = 0, N;
locale loc("russian");
locale::global(loc);
clock_t t;
t = clock();
srand(time(NULL));
fscanf(f,"%d",&N);
int **MatrS = new int *[N];
for(int i = 0; i < N; i++)
{
MatrS[i] = new int[N];
}
printf("\n%d\n",N);
printf("Матрица расстояний\n");
while(!feof(f))
{
for (int i=0;i<N;i++)
{
for (int j=0;j<N;j++)
{
fscanf(f,"%d",&MatrS[i][j]);
if(i==j)
MatrS[i][j] = 0;
printf("%d ",MatrS[i][j]);
}
printf("\n");
}
}
fclose(f);
for(int k=0 ; k<N ; k++)
{
for(int i=0 ; i<N ; i++)
{
for(int j=0 ; j<N ; j++)
{
if ((MatrS[i][k] + MatrS[k][j]) < MatrS[i][j])
MatrS[i][j] = MatrS[i][k] + MatrS[k][j];
}
}
}
for(int i = 0; i < N; i++)
delete [] MatrS[i];
delete [] MatrS;
printf("Матрица кратчайших путей\n");
for(int i=0 ; i<N ; i++)
{
for(int j=0 ; j<N ; j++)
{
printf("%d ",MatrS[i][j]);
}
printf("\n");
}
printf ("Программе потребовалось %.3f сек.\n",((float)t)/CLOCKS_PER_SEC);
system("pause");
}
Приложение Б
(обязательное)
Код программы по алгоритму Беллмана-Форда
#include <stdio.h>
#include <iostream>
#include <time.h>
using namespace std;
const int inf=1E9;
int n,m,i,*rez,j,start_v,k=1;
struct Duga
{
int from,to,length;
}*mRast;
int main()
{
FILE *f = fopen("algBF.txt","r");
locale loc("russian");
locale::global(loc);
fscanf(f,"%d %d",&n,&m);
clock_t t;
t=clock();
int **Smej=new int *[n];
mRast= new Duga [m];
for (i=1; i<=n; i ++)
{
Smej[i]=new int [n];
for (j=1; j<=n; j++)
{
fscanf(f,"%d",&Smej[i][j]);
if (Smej[i][j]!=0)
{
mRast[k].from=i;
mRast[k].to=j;
mRast[k].length=Smej[i][j];
k++;
}
}
}
for(int i = 0; i < N; i++)
delete [] Smej[i];
delete [] Smej;
fclose(f);
for(start_v=1;start_v<=n;start_v++)
{
rez=new int [n];
for (i=1;i<=n;++i)
rez[i]=inf;
rez[start_v]=0;
for (i=1;i<=(n+1);i++)
{
for (j=1;j<=m;j++)
{
if (rez[mRast[j].from]<inf && rez[mRast[j].from]+mRast[j].length<rez[mRast[j].to])
if (i==(n+1))
{
printf("В графе есть цикл отрицательного веса");
system ("pause");
return 0;
}
else
rez[mRast[j].to]=rez[mRast[j].from]+mRast[j].length;
}
}
for (i=1;i<=n;++i)
{
if (rez[i]==inf) printf("нет пути\n"); else printf("%d ",rez[i]);
}
printf("\n");
}
t=clock()-t;
printf("Время работы %f", (double)t/CLOCKS_PER_SEC);
delete [] mRast;
delete [] rez;
system ("pause");
}
2