#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
int i, j, k, c, n, min, ras, p;
int A[10][10];
int C[10][10];
int B[10][10];
void A_0(int n) // обнуление и печать матрицы А
{
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
if (i == j) { A[i][j] = 0; }
else { A[i][j] = 32000; };
};
};
}
void A_adj(int n) // матрица смежности исходного графа записанная в А
{
while ((i != 0) || (j != 0))
{
scanf("%i%i", &i, &j);
A[i][j] = 1;
};
}
void AB1(int n) // умножение матрицы А на В один раз и запись результата в С
{
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
min = 32000;
for (k = 1; k <= n; k++)
if (A[i][k] + B[k][j] <= min)
{
C[i][j] = A[i][k] + B[k][j];
min = C[i][j];
};
};
};
}
void C_fin(int n)
{
for (i = 1; i <= n; i++) // обнулить матрицу С и напечатать
{
for (j = 1; j <= n; j++)
{
C[i][j] = 0;
};
};
for (i = 1; i <= n; i++) // заполнить матрицу В значениями матрицы А и напечатать
{
for (j = 1; j <= n; j++)
{
B[i][j] = A[i][j];
};
};
AB1(n);
}
void main()
{
printf("n: ");
scanf("%i", &n);
A_0(n);
A_adj(n);
C_fin(n); printf("\n");
ras = n - 1; //количество перемножений матриц А на В (н-1 степень)
for (p = 2; p <= ras; p++)
{
AB1(n);
for (i = 1; i <= n; i++) // заполнить матрицу A значениями матрицы C и напечатать
{
for (j = 1; j <= n; j++)
A[i][j] = C[i][j];
};
};
int zero_count;
printf("istoki: \n");
for (i = 1; i <= n; i++) //опредение истоков
{
zero_count = 0;
for (j = 1; j <= n; j++) if ((C[i][j] == 0)|| (C[i][j] == 32000)) zero_count++;
if (zero_count == 1) printf("%i ", i);
}
printf("\n");
zero_count = 0;
printf("stoki: \n");
for (j = 1; j <= n; j++) //опредение стоков
{
zero_count = 0;
for (i = 1; i <= n; i++) if ((C[i][j] == 0) || (C[i][j] == 32000)) zero_count++;
if (zero_count == 1) printf("%i ", j);
}
getch();
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.