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] |