学离散数学时遇到到第一个算法,记录一下:
代码思路:
warshall(A[1...n,1...n]
r(0)<-A;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
r(k)[i,j]=r(k-1)[i,j] or(r(k-1)[i,k] and r(k-1)[k,j]);
return r(n);
War-shall 算法c++代码实现:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAX 100
using namespace std;
int map[MAX][MAX];//输入的矩阵
int convert[MAX][MAX];//变换后的矩阵
int mark[MAX][MAX];//标记变换位置
int sum;//记录变换总位置数
int n;//n 乘 n矩阵
void getmap()
{
printf("输入邻接矩阵:\n");
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
scanf("%d", &map[i][j]);
convert[i][j] = map[i][j];
mark[i][j] = 0;
}
}
sum = 0;
printf("\n");
}
void w