Subversion Repositories wimsdev

Rev

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]