Rev 13103 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
20 | reyssat | 1 | !if $wims_read_parm!=slib_header |
13103 | bpr | 2 | !goto proc |
20 | reyssat | 3 | !endif |
4158 | bpr | 4 | |
4351 | bpr | 5 | slib_author=Bernadette, Perrin-Riou |
4158 | bpr | 6 | |
20 | reyssat | 7 | slib_example=6\ |
13103 | bpr | 8 | 6,7\ |
9 | 6,5,euler\ |
||
10 | 12,5,euler |
||
11 | |||
12 | |||
3265 | bpr | 13 | slib_require=pari |
20 | reyssat | 14 | !exit |
15 | |||
16 | :proc |
||
17 | !reset slib_m, slib_n |
||
12678 | bpr | 18 | !distribute item $wims_read_parm into slib_n, slib_m, slib_option |
20 | reyssat | 19 | !default slib_m =!randint $[floor(1.5*$slib_n)], $[2*$slib_n] |
20 | slib_sommet=!values x for x=1 to $slib_n |
||
12678 | bpr | 21 | slib_u=!exec pari matrix($slib_n,$slib_n,slib_i,slib_j,if(slib_j==slib_i,slib_i)) |
13103 | bpr | 22 | !if $slib_option!=euler |
12676 | bpr | 23 | slib_u=!translate internal ; to $\ |
13103 | bpr | 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 $\ |
||
20 | reyssat | 36 | $ to ; in $slib_u |
12676 | bpr | 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)} |
13103 | bpr | 38 | slib_u=!translate internal ; to $\ |
39 | $ in $slib_u |
||
12676 | bpr | 40 | slib_euler=$slib_euler, $slib_a |
41 | slib_S=$slib_a |
||
13103 | bpr | 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 |
||
20 | reyssat | 54 | :end |
13103 | bpr | 55 | slib_m=!itemcnt $slib_euler |
20 | reyssat | 56 | |
13103 | bpr | 57 | slib_u = !nonempty lines $slib_u |
58 | slib_u=!translate internal $\ |
||
59 | $ to ; in $slib_u |
||
20 | reyssat | 60 | |
13103 | bpr | 61 | slib_p = !shuffle $slib_n |
62 | slib_pp =!item $slib_p of $slib_sommet |
||
63 | slib_euler1= |
||
64 | !for slib_i in $slib_euler |
||
65 | slib_pos=!positionof item $slib_i in $slib_p |
||
66 | slib_euler1=!append item $slib_pos to $slib_euler1 |
||
67 | !next slib_i |
||
68 | slib_euler=$slib_euler1 |
||
69 | 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)) ;matrix($slib_n,$slib_n,slib_i,slib_j,slib_M[slib_p[slib_i],slib_p[slib_j]]) |
||
70 | !else graph eulerien |
||
71 | !readproc slib/graph/randomconnex $slib_n, $slib_m |
||
72 | slib_G=$slib_out |
||
18392 | bpr | 73 | !readproc gp/grapheuler.gp |
13103 | bpr | 74 | slib_G=!exec pari G=graphe_eulerien([$slib_G]);C=cycle_eulerien(G);[G,C] |
75 | slib_euler=!declosing $(slib_G[2]) |
||
76 | slib_G=!declosing $(slib_G[1]) |
||
20 | reyssat | 77 | |
12678 | bpr | 78 | !endif |
79 | |||
7692 | bpr | 80 | slib_out=[$slib_G],[$slib_euler] |