图的顶点可达闭包
作者:互联网
题目描述
给定有向图的邻接矩阵A,其元素定义为:若存在顶点i到顶点j的有向边则A[i,j]=1,若没有有向边则A[i,j]= 0。试求A的可达闭包矩阵A*,其元素定义为:若存在顶点i到顶点j的有向路径则A*[i,j]=1,若没有有向路径则A*[i,j]= 0。
输入
第1行顶点个数n
第2行开始的n行有向图的邻接矩阵,元素之间由空格分开
输出
有向图的可达闭包矩阵A*,元素之间由空格分开
样例输入
4 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0样例输出
0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0提示
#include<iostream> using namespace std; #define Maxlen 50 void change(int n,int m[Maxlen][Maxlen]) { for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(m[i][j]==0&&m[i][k]==1&&m[k][j]==1) m[i][j]=1; } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(j==0) cout<<m[i][j]; else cout<<" "<<m[i][j]; } cout<<endl; } } int main() { int T; T=1; while(T--) { int n; cin>>n; int m[Maxlen][Maxlen]; for(int i=0;i<Maxlen;i++) for(int j=0;j<Maxlen;j++) m[i][j]=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>m[i][j]; change(n,m); } return 0; }
标签:闭包,有向图,可达,int,元素,Maxlen,顶点 来源: https://www.cnblogs.com/SZU-DS-wys/p/12181111.html