8.2.Warshall

来源:互联网 发布:儿童教学软件 编辑:程序博客网 时间:2024/06/06 20:05

/* *8.2.Warshall *2011/08/13 *ArtWalk *//*   a b c d  a b c d         a 0 1 0 0a 1 1 1 1 A =   b 0 0 0 1T =   b 1 1 1 1         c 0 0 0 0c 0 0 0 0 d 1 0 1 0d 1 1 1 1 R(k)(ij) = R(k-1)(ij) || R(k-1)(ik) && R(k-1)(kj) */#include <iostream>using namespace std;#define M 4void display( int R[M][M] );void process( int A[M][M] );int main(int ac, char** av){int A[M][M] = {{ 0, 1, 0, 0 },{ 0, 0, 0, 1 },{ 0, 0, 0, 0 },{ 1, 0, 1, 0 }};process(A);return 0;}void process( int A[M][M] ) {// R : 0 -> Mint R[M+1][M][M] = {0};// A -> Rfor ( int i = 0; i != M; ++i ) {for ( int j = 0; j != M; ++j ) {R[0][i][j] = A[i][j];}}display(R[0]);// R : 1 -> Mfor ( int k = 1; k <= M; ++k ) {for ( int i = 0; i != M; ++i ) {for ( int j = 0; j != M; ++j ) {R[k][i][j] = ( R[k-1][i][j]|| ( R[k-1][i][k-1] && R[k-1][k-1][j] ) );}}printf("%d\n",k);display(R[k]);}}void display( int R[M][M] ) {for ( int i = 0; i != M; ++i ) {for ( int j = 0; j != M; ++j ) {printf("%d ", R[i][j]);}printf("\n");}//printf("\n");}



原创粉丝点击