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=random eulerian graph
5
slib_parms=2\
6
,n number of edges
7
,m approximative number of vertex
8
slib_author=Bernadette PERRIN-RIOU
9
slib_out=[adjacence matrix],[eulerian cycle]
10
slib_comment=
11
slib_example=6\
12
6,7
3265 bpr 13
slib_require=pari
20 reyssat 14
!exit
15
 
16
:proc
17
!reset slib_m, slib_n
18
!distribute  item $wims_read_parm into  slib_n, slib_m
19
!default slib_m =!randint $[floor(1.5*$slib_n)], $[2*$slib_n]
20
slib_sommet=!values x for x=1 to $slib_n
21
slib_u=!exec pari matrix($slib_n,$slib_n,slib_i,slib_j,if(slib_j ==slib_i,slib_i))
22
 
23
slib_u=!translate internal  ; to $\
24
$  in $slib_u
25
slib_S=1
26
slib_euler=$slib_S
27
!for slib_k=2 to $slib_m
28
	slib_s=!line $slib_S of $slib_u
29
		slib_bonsom=!listcomplement $slib_s in $slib_sommet
30
		!if $slib_bonsom <> $empty
31
			 slib_a = !randitem  $slib_bonsom
32
		!else
33
			!goto end	 
34
		!endif
35
		slib_u=!translate internal  $\
36
$ to ; in $slib_u
37
		slib_u=!exec pari {slib_M=Mat([$slib_u]); slib_M[$slib_a,$slib_S]=$slib_S ;  slib_M[$slib_S,$slib_a]=$slib_a;print(slib_M)}
38
		slib_u=!translate internal  ; to $\
39
$  in $slib_u
40
		slib_euler=$slib_euler, $slib_a	
41
		slib_S=$slib_a
42
!next slib_k
43
 
44
slib_manquant=!listcomplement $slib_euler in $slib_sommet
45
!if $slib_manquant <> $empty
46
	 !for slib_a in $slib_manquant
47
	 	slib_u=!translate internal  $\
48
$ to ; in $slib_u
49
		slib_u=!exec pari {slib_M=Mat([$slib_u]); slib_M[$slib_a,$slib_S]=$slib_S ;  slib_M[$slib_S,$slib_a]=$slib_a;print(slib_M)}
50
		slib_euler=$slib_euler, $slib_a
51
		slib_S=$slib_a
52
	!next slib_a	
53
!endif	
54
:end
55
 
56
 
57
slib_m=!itemcnt $slib_euler
58
 
59
slib_u = !nonempty lines $slib_u
60
slib_u=!translate internal  $\
61
$  to ; in $slib_u
62
 
63
 
64
slib_p = !shuffle $slib_n
65
slib_pp =!item  $slib_p of $slib_sommet
66
slib_euler1=
67
!for slib_i in $slib_euler
68
	slib_pos=!positionof item $slib_i in $slib_p
69
	slib_euler1=!append item $slib_pos to $slib_euler1
70
!next slib_i
71
slib_euler=$slib_euler1
72
slib_G=!exec pari slib_p = [$slib_p]; slib_M=Mat([$slib_u]); slib_M=matrix($slib_n,$slib_n,slib_i,slib_j,if(slib_i !=slib_j && slib_M[slib_i,slib_j] != 0,1)) ;\
73
matrix($slib_n,$slib_n,slib_i,slib_j,slib_M[slib_p[slib_i],slib_p[slib_j]])
74
 
75
slib_out=[$slib_G],[$slib_euler]