Subversion Repositories wimsdev

Rev

Rev 3265 | Go to most recent revision | Details | 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]
12
!exit
13
 
14
:proc
15
slib_G= !declosing $wims_read_parm
16
slib_G=!translate internal  $\
17
$  to ; in $slib_G
18
slib_n=!exec pari slib_N=Mat([$slib_G]);matsize(slib_N)[1]
19
 
20
 
21
slib_P=!exec pari {slib_N=Mat([$slib_G]);slib_n=matsize(slib_N)[1];\
22
slib_P=matrix(slib_n,slib_n,slib_i,slib_j,-1);\
23
slib_mod=0;\
24
for(slib_k=1,slib_n,slib_P[slib_k,slib_k]=0;\
25
  slib_mod=1;\
26
  while(slib_mod, slib_mod=0;\
27
    for(slib_i=1,slib_n,\
28
      for(slib_j=1,slib_n,\
29
        if(slib_N[slib_i,slib_j]*(slib_P[slib_k,slib_i]+1),\
30
          if((slib_P[slib_k,slib_j]+1),\
31
            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;\
32
            slib_mod=1),\
33
            slib_P[slib_k,slib_j]=slib_P[slib_k,slib_i]+1; slib_mod=1)\
34
        );\
35
      );\
36
    );\
37
  );\
38
);\
39
print(slib_P);\
40
}
41
 
42
slib_out=!trim $slib_P
43