program grdeg
integer, allocatable :: A(:,:), B(:,:), ecc(:)
logical :: directed
read(*, *) directed, n
print*, directed, n
allocate(A(n,n), B(n,n), ecc(n))
call rdmat(A, n, directed )
!call prmat (A, n, 2)
call connect(A, n, B)
ecc = maxval(B, 1)
irad = minval(ecc, ecc > 0)
if (directed) then
print*, 'directed graph'
else
print*, 'undirected graph'
end if
1 format(A14, (T15, 4(I4:, ',')))
print 1, 'radius: ',irad
print 1, 'diameter: ', maxval(ecc)
print 1, 'center points: ', pack( (/ (i, i = 1,n) /), ecc == irad)
! call prmat(B, n, 2)
contains
subroutine prmat(A, n, d)
character fmt*40
integer, intent(in) :: n, d, A(n,n)
write(fmt, '(A,I0,A,I0,A)') '(', n, '(I', d, ':,X))'
write(*, fmt) ((A(j,i), j=1,n) ,i=1,n)
end subroutine
subroutine rdmat(A, n, directed)
integer, intent(out) :: A(n,n)
logical directed
A = 0
do
read(*,*, end=1) i,j
A(i,j) = A(i,j)+1
if (.not. directed) A(j,i) = A(j,i)+1
end do
1 continue
end subroutine
subroutine connect(A, n, B)
integer, intent(in) :: A(n,n)
integer, intent(out):: B(n,n)
integer:: C(n,n)
B = 0
C = A
do i=1,n
where (B == 0 .and. C > 0) B = i
C = MATMUL(A,C)
end do
do i=1,n
B(i,i) = 0
end do
end subroutine
end program
CnByb2dyYW0gZ3JkZWcKCiAgICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBBKDosOiksIEIoOiw6KSwgZWNjKDopCiAgICBsb2dpY2FsIDo6IGRpcmVjdGVkIAogICAgCiAgICByZWFkKCosICopIGRpcmVjdGVkLCBuCiAgICBwcmludCosIGRpcmVjdGVkLCBuCiAgICBhbGxvY2F0ZShBKG4sbiksIEIobixuKSwgZWNjKG4pKQoKICAgIGNhbGwgcmRtYXQoQSwgbiwgZGlyZWN0ZWQgKQogICAgCSFjYWxsIHBybWF0IChBLCBuLCAyKQogICAgY2FsbCBjb25uZWN0KEEsIG4sIEIpIAogICAgCiAgICBlY2MgPSBtYXh2YWwoQiwgMSkKICAgIGlyYWQgPSAgbWludmFsKGVjYywgZWNjID4gMCkKICAgIGlmIChkaXJlY3RlZCkgdGhlbiAKICAgICAgICBwcmludCosICdkaXJlY3RlZCBncmFwaCcKICAgIGVsc2UKICAgICAgICBwcmludCosICd1bmRpcmVjdGVkIGdyYXBoJwogICAgZW5kIGlmCiAgICAKMSBmb3JtYXQoQTE0LCAoVDE1LCA0KEk0OiwgJywnKSkpICAgIAogICAgcHJpbnQgMSwgJ3JhZGl1czogICAgICAgICcsaXJhZAogICAgcHJpbnQgMSwgJ2RpYW1ldGVyOiAgICAgICcsIG1heHZhbChlY2MpCiAgICBwcmludCAxLCAnY2VudGVyIHBvaW50czogJywgcGFjayggICgvIChpLCBpID0gMSxuKSAvKSwgZWNjID09IGlyYWQpCiAgICAKICAgISBjYWxsIHBybWF0KEIsIG4sIDIpCgpjb250YWlucwoKICAgIHN1YnJvdXRpbmUgcHJtYXQoQSwgbiwgZCkKICAgICAgICBjaGFyYWN0ZXIgZm10KjQwCiAgICAgICAgaW50ZWdlciwgaW50ZW50KGluKSA6OiBuLCBkLCBBKG4sbikKICAgICAgICB3cml0ZShmbXQsICcoQSxJMCxBLEkwLEEpJykgJygnLCBuLCAnKEknLCBkLCAnOixYKSknCiAgICAgICAgd3JpdGUoKiwgZm10KSAoKEEoaixpKSwgaj0xLG4pICxpPTEsbikKICAgIGVuZCBzdWJyb3V0aW5lCiAgICAKICAgIHN1YnJvdXRpbmUgcmRtYXQoQSwgbiwgZGlyZWN0ZWQpCiAgICAgICAgaW50ZWdlciwgaW50ZW50KG91dCkgOjogQShuLG4pCiAgICAgICAgbG9naWNhbCBkaXJlY3RlZAogICAgICAgIEEgPSAwCiAgICAgICAgZG8KICAgICAgICAgICAgcmVhZCgqLCosIGVuZD0xKSBpLGoKICAgICAgICAgICAgQShpLGopID0gQShpLGopKzEKICAgICAgICAgICAgaWYgKC5ub3QuIGRpcmVjdGVkKSAgQShqLGkpID0gQShqLGkpKzEKICAgICAgICBlbmQgZG8KICAgIDEgICBjb250aW51ZSAgCiAgICBlbmQgc3Vicm91dGluZQogICAgCiAgICBzdWJyb3V0aW5lIGNvbm5lY3QoQSwgbiwgIEIpCiAgICAgICAgaW50ZWdlciwgaW50ZW50KGluKSA6OiBBKG4sbikKICAgICAgICBpbnRlZ2VyLCBpbnRlbnQob3V0KTo6IEIobixuKQogICAgICAgIGludGVnZXI6OiBDKG4sbikKCiAgICAgICAgQiA9IDAKICAgICAgICBDID0gQQogICAgCiAgICAgICAgZG8gaT0xLG4KICAgICAgICAgICAgd2hlcmUgKEIgPT0gMCAuYW5kLiBDID4gMCkgQiA9IGkKICAgICAgICAgICAgQyA9IE1BVE1VTChBLEMpCiAgICAgICAgZW5kIGRvCiAgICAgICAgCiAgICAgICAgZG8gaT0xLG4KICAgICAgICAgICAgQihpLGkpID0gMAogICAgICAgIGVuZCBkbwogICAgICAgIAogICAgZW5kIHN1YnJvdXRpbmUKCmVuZCBwcm9ncmFtCgo=