Subversion Repositories wimsdev

Rev

Rev 20 | Rev 4158 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
!if $wims_read_parm!=slib_header
2
 !goto proc
3
!endif
4
slib_title=Matrix of diameter of a graph
5
slib_parms=1\
6
,matrix (which represents a non oriented graph with no cycles)
7
slib_author=Bernadette PERRIN-RIOU
8
slib_out=matrix of distances
9
slib_comment=
10
slib_example=0,1,1;1,0,1;1,1,0\
11
[0,0,1;0,0,1;1,1,0]
3265 bpr 12
slib_require=pari
20 reyssat 13
!exit
14
 
15
:proc
16
slib_G= !declosing $wims_read_parm
17
slib_G=!translate internal  $\
18
$  to ; in $slib_G
19
slib_n=!exec pari slib_N=Mat([$slib_G]);matsize(slib_N)[1]
20
 
21
 
22
slib_P=!exec pari {slib_N=Mat([$slib_G]);slib_n=matsize(slib_N)[1];\
23
slib_P=matrix(slib_n,slib_n,slib_i,slib_j,-1);\
24
slib_mod=0;\
25
for(slib_k=1,slib_n,slib_P[slib_k,slib_k]=0;\
26
  slib_mod=1;\
27
  while(slib_mod, slib_mod=0;\
28
    for(slib_i=1,slib_n,\
29
      for(slib_j=1,slib_n,\
30
        if(slib_N[slib_i,slib_j]*(slib_P[slib_k,slib_i]+1),\
31
          if((slib_P[slib_k,slib_j]+1),\
32
            if(slib_P[slib_k,slib_j]>slib_P[slib_k,slib_i]+1, slib_P[slib_k,slib_j]=slib_P[slib_k,slib_i]+1;\
33
            slib_mod=1),\
34
            slib_P[slib_k,slib_j]=slib_P[slib_k,slib_i]+1; slib_mod=1)\
35
        );\
36
      );\
37
    );\
38
  );\
39
);\
40
print(slib_P);\
41
}
42
 
43
slib_out=!trim $slib_P
44