算法描述: 传递闭包的一种有效算法—Warshall算法,这种算法也便于计算机实现。 (1)置新矩阵A=M; (2)i=1; (3)对所有j如果A[j,i]=1,则对k=1,2,…,n,A[j,k]=A[j,k]∨A[i,k]; (4)i加1;(i是行,j是列) (5)如果i≤n,则转到步骤3),否则停止。 例如: 代码:
#include
#define N 4 //宏定义
int get_matrix(int a[N][N])
{
int i = 0,j = 0;
for (i = 0;i < N;i++)
{
for (j = 0;j < N;j++)
{
scanf("%d",&a[i][j]);
if (a[i][j] != 0 && a[i][j] != 1)
return 1;
}
}
return 0;
}
int output_matrix(int a[N][N])
{
int i = 0,j = 0;
for (i = 0;i < N;i++) {
for (j = 0;j < N;j++) {
printf("%d ",a[i][j]);
}
putchar('\n');
}
}
int warshall(int a[][N])
{
//(1)i=1;
//(2)对所有j如果a[j,i]=1,则对k=0,1,…,n-1,a[j,k]=a[j,k]∨a[i,k];
//(3)i加1;
//(4)如果i |