离散数学中Warshall算法简析【离散数学】

算法的自己的语言描述:(i行j列)依次遍历邻接矩阵中的所有元素M[j,i](就是这里让人感到别扭!!!),比如按照先列后行进行,如果M[j,i] != 0,那么就把i行加到第j行上。(尝试过,,遍历M[i,j],,j加到i行的情况,)
以下是例子:
离散数学中Warshall算法简析【离散数学】_第1张图片
离散数学中Warshall算法简析【离散数学】_第2张图片
离散数学中Warshall算法简析【离散数学】_第3张图片

#include
int main()
{
    int a[50][50];
    int i,t,j,n;
    scanf("%d", &n);
    for(i=0; i<=n-1; i++)
        for(t=0; t<=n-1; t++)
            scanf("%d", &a[i][t]);
    for(i=0; i<=n-1; i++)
        for(t=0; t<=n-1; t++)
            if(a[t][i])//这里i行t列,则逐行逐列遍历a[t][i];
                for(j=0; j<=n-1; j++)
                    a[t][j]=a[t][j]||a[i][j];//这么写,就是把相加以后
    for(i=0; i<=n-1; i++)
        for(t=0; t<=n-1; t++)
        {
            if(t==n-1)
            {
                printf("%d\n",a[i][t]);
            }
            else
            {
                printf("%d ",a[i][t]);
            }
        }
}

你可能感兴趣的:(离散数学,C/C++)