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=Connex component of a vertex in a graph
5
slib_parms=2\
6
,matrix (which represents a simple non oriented graph)\
7
,point
8
slib_author=Bernadette PERRIN-RIOU
9
slib_out=list of the connex component of the point
10
slib_comment=the matrix must be between brackets
3265 bpr 11
slib_example=[0,0,1;0,0,0;1,1,0],2
12
slib_require=pari
20 reyssat 13
!exit
14
 
15
:proc
16
 
17
slib_out=
18
slib_G= !item 1 to -2 of $wims_read_parm
19
slib_G=!declosing $slib_G
20
slib_point= !item -1 of $wims_read_parm
21
slib_G=!translate internal  $\
22
$   to ; in $slib_G 
23
 
24
slib_n=!exec pari slib_N=Mat([$slib_G]);matsize(slib_N)[1]
25
 
26
slib_dstx=!exec pari {slib_N=Mat([$slib_G]);\
27
	slib_P=vector($slib_n,slib_i,-1);\
28
	slib_P[$slib_point]=0;\
29
	slib_modif=1;\
30
	while(slib_modif,\
31
  		slib_modif=0;\
32
 		 for(slib_i=1,$slib_n,\
33
    		for(slib_j=1,$slib_n,\
34
     			 if(slib_N[slib_i,slib_j]*(slib_P[slib_i]+1),\
35
       				 if((slib_P[slib_j]+1),\
36
         				 if(slib_P[slib_j]>slib_P[slib_i]+1, slib_P[slib_j]=slib_P[slib_i]+1;slib_modif=1),\
37
          				slib_P[slib_j]=slib_P[slib_i]+1; slib_modif=1);\
38
          		);\
39
   			);\
40
 		 );\
41
	);\
42
print(slib_P)}
43
 
44
slib_cc=!exec pari {slib_P=Vec([$slib_dstx]);\
45
slib_Q=vector($slib_n);\
46
for(slib_i=1,$slib_n,\
47
  if(slib_P[slib_i]+1,slib_Q[slib_i]=1));\
48
print(slib_Q)}
49
 
50
slib_out= !positionof item 1 in $slib_cc
51