Вы находитесь на странице: 1из 6

Министерство Образования и Исследований

Республики Молдова
Технический Университет Молдовы
Департамент Физики

Отчет
по лабораторной работе Nr.6.

по Дискретной математике
Тема: Хранение графов в памяти ЭВМ.
Вариант 10

Выполнил ст.гр. MN-222 Шологан Артемиос


Проверил ассист.универ. Орындаш Виктория

Кишинев – 2023
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#define max 1000

int a[100]
[100],b[100],n,m,j,i,v[100],min=1000,k=1,i1,z=0,numar
=0,elem=1001,c[100],loc,q=1;

void afisare ( int a[][100],int n,int m){


int h,l,i,j,k=0;

h=1; h=h*m*5; printf(" ");


for(l=1;l<=h;l++) if (l==h) printf(" ");
else printf("_"); printf("\n");
printf("| |"); for (i=1;i<m;i+
+)printf("x%2d |",i); printf("\n");

printf("|");
for(l=1;l<=h;l++) if (l%5==0)
printf("|"); else printf("_"); printf("\n");
for (i=1;i<n;i++){
if(i>=m) printf("|V%2d
|",k++);
else
printf("|x%2d |",i);
for (j=1;j<m;j++)
if(a[i][j]==1000) printf(" + |");
else
printf("%4d|",a[i][j]); printf("\n|");
for(l=1;l<=h;l++) if(l%5==0)printf("|"); else printf("_");
printf("\n"); }
}

void d_min (int j2)


{ int i2;
if(elem<1000){
for(i=0;i<numar;i++) //caut
elementul care a apelat recursia in drumul minim
precedent
if(c[i]==elem )loc =i; //salvez
locul lui

for(i=0;i<loc;i++) //copii in b toate


elementele din drumul miim precedent
b[z++]=c[i]; // pina la elementul
care a apelat recursia [ pe el inclusiv ]
elem=1001;
}

b[z++]=j2; //salvez nodul din drum

if(j2==m-1){ //verific daca sa ajuns


la ultimul nod
printf("\n#Drumul minim[ %d ] :
",q++);// daca da atunci afizez drumul
for(i=0;i<z;i++) printf("%3d",b[i]);
numar = z; //salvez lungimea
drumului afisat
for(i=0;i<z;i++) //salvez drumul
afisat
c[i]=b[i];
z=0; //lungimea drumului = 0
}

for(i2=j2+1;i2<m;i2++) //verific
care e nodul urmator ce formeaza drumul
if( a[n-1][j2]!=1000 && a[j2][i2]!
=1000 ) {
if( (a[n-1][j2]-a[j2][i2] )== a[n-1]
[i2])
{
d_min(i2); elem = i2; // apelez
recursia si salvez elementul care apeleaza recursia
}

}
}

int main () {
system("COLOR F2");

printf ("\nIntrodu numarul de virfuri


: "); scanf ( "%d",&n); n++;
m=n;

printf("\nIntroduce-ti Graful
Ponderat : \n\n");
//introduc graful ponderat
for(i=1;i<n;i++)
for(j=1;j<n;j++)
scanf("%d",&a[i][j]);

printf("\nA-ti introdus urmatorul


graf ponderat:\n\n"); afisare (a,n,m);

// initializez v0
for (i=1;i<n;i++)
a[n][i]=a[i][n-1]; n++;

while(1) {
for(j=1;j<m;j++){
for(i=j+1;i<m;i++)
if( a[n-1][i]!=1000 && a[j][i]!
=1000 ) {
if( (a[n-1][i]+ a[j][i] )< min)
min=(a[n-1][i]+ a[j][i] );
}
if(j==(m-1)) min=0;
a[n][j]=min; min=1000;
}

for(i1=1;i1<m;i1++)
if(a[n-1][i1] == a[n][i1]) k++;
if( k == m ){ n++; k=1; goto Mw; }
else { k=1; n++; }

}
Mw:
printf("\n\n\n\tBela-Kalaba :");
printf("\n\n");
afisare(a,n,m);
printf("\n\n\t\tLungimea drumului
minim = %d \n",a[n-1][1]);
printf("\n\t***Drumurile minime*** \
n");
d_min(1);
getch();
}

Вам также может понравиться