Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсавой проект.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
342.78 Кб
Скачать

Код программы по алгоритму Флойда

#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