離散數學之關係(傳遞閉包)
阿新 • • 發佈:2019-01-23
傳遞閉包的定義:
R’是R(不具有傳遞性質)變動最少的步驟得到的具有傳遞性質的關係。
方法:warshall法
即執行n次,每次使得MR[n][i],MR[i][n]都為1時使得MR[i][j]為1,否則還是為MR[i][j].
#include<stdio.h> #define N 10 int judge(int k,int i,int j) { if(i==1 && j==1){ return 1; } return k; } void warShall(int MR[N][N],int n) { for(int k=0;k<n;k++){ for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i!=k || j!=k){ MR[i][j]=judge(MR[i][j],MR[k][j],MR[i][k]); } } } } } int main() { int MR[10][10]; int mul; scanf("%d",&mul); for(int i=0;i<mul;i++){ for(int j=0;j<mul;j++){ scanf("%d",&MR[i][j]); } } printf("求傳遞閉包為:\n"); warShall(MR,mul); for(int i=0;i<mul;i++){ for(int j=0;j<mul;j++){ printf("%d ",MR[i][j]); } printf("\n"); } return 0; }
執行結果: