Pʐ؂vO@`̂TETu[`֐(2)`

E"sepa*_2.c"́A̂悤ȋ@\̊֐\ĂB

@@@Xg̏o
@@  擪ʒue[ȕ
@@  ̏o
@@  ̒T
@@  m[h̐
@@  ڑ̃`FbN


P@Xg̏o

@@    +-- print_ilist(x)
@@    |
@@  print_xnode(x)

@@  print_suppldata()


print_ilist(x)

@iϐj
    struct ilist *x   l̃Xg

@i@\j
@EXgx̗vf擪珇ɖ܂ŏo͂B


print_xnode(x)

@iϐj
    struct node x[MAXNODE]@`ԑflbg[N

@i@\j
@E`ԑflbg[Nx\邷ׂĂ̌`ԑfm[hi`ԑfm[h̔zx̑S
@@vfjʂ֏o͂B

@Eo͂̌`͗Ⴆ΂̂悤ɂȂB

@@@@>#0:} (10, 0-3)  { B(#5),  NIL }
@@@@>#1:} (10, 0-2)  { (#4),  NIL }
@@@@>#2:} (10, 0-1)  { (#3),  NIL }
@@@@>#3: (10, 1-2)  { (#4),  NIL }
@@@@>#4: (490, 2-3)  { B(#5),  NIL }
@@@@>#5:B (2, 3-4)  { NIL }


print_suppldata()

@i@\j
@E[U⑫ǂݍ񂾃f[^ׂĉʂ֏o͂Bo͂́Aǉ
@@`ԑfizplusdatajA폜ꂽ`ԑfizminusdataj̏ɍsB


Q@擪ʒue[ȕ

@@@init_headtabl()
@@@join_headtabl(head,id)

@@    +-- print_ilist2(x)
@@    |
@@@print_headtabl(imax)


join_headtabl(head,id)

@iϐj
    int  head   `ԑf̏oĂ擪ʒu
    int  id     `ԑfm[ḧAԍ

@i@\j
@E`ԑfm[hxnode[id]̈AԍidAzvfheadtabl[head]ĩX
@@gjɂȂB

@Eheadtabl͐擪ʒue[ułA`ԑflbg[N̒Tシ
@@邽߂ɎgpBhead́A`ԑfm[hxnode[id]̏initstr̈ʒu
@@lłB


print_headtabl(imax)        /* headtabl[0-imax] wo Shuturyoku suru. */

@iϐj
    int imax    o͂擪ʒue[u̐擪ʒȕl

@i@\j
@E擪ʒue[uheadtabl̗vfĩXgjAheadtabl[0]
@@headtabl[imax]܂ŏo͂B


R@̏o

@@@print_all_solutions()
@@@print_best_solutions()


print_all_solutions()

@iϐj
    struct slist *l@ ̃̕Xg

@i@\j
@ẼXgsolutionɂȂĂ镶ijׂĂAʂуt
@@@C֏o͂B


print_best_solutions()

@iϐj
    struct slist *l@ ̃̕Xg
    int nbest         wWlŏ̉̌
    int nprint        o͂̌
    int n             ꎞIȕϐ

@i@\j
@ẼXgsolutionɂȂĂ镶iĵœK݂̂A
@@max_nbesto͂Bo͉͐ʂуt@CB


S@̒T

@@@  +-- trace_net(x,s,magic,flag)
@@    |
@@@find_solutions(x)


trace_net(x,s,magic)

@iϐj
    struct node x   T̏o_ƂȂ`ԑfm[h
    char s[]@@@@̕iċAďoɎgpj
    int magic @@@̓K؂̎wWl

@i@\j
@E`ԑfm[hxo_ƂĉE֌`ԑflbg[NǂAɓB
@@A炻܂ł̃lbg[N̓؂𕶎ɂāÃXg
@@solutionւȂB

@EɓBÂꂩ̏ɂĂ͂܂ΒT𒆎~B
@@@(1) lbg[Nmax_pass_time𒴂Ăǂꍇ
@@@(2) magic̒lA܂łmagic̍ŏl𒴂ꍇ
@@@(3) ̃m[hEւǂȂꍇ

@EɓBAL̏ɂĂ͂܂Ȃ΁A炻܂ł̓؁i
@@js𐶐Atrace_netċNIɌĂяoB

@EmagićA͌ʂ̓K؂wWlŁA̒l͎̎ɂČvZB

@    @magic = ̌*100 + torڎorǓ_̌

@Ě̕`͗Ⴆ΂̂悤ɂȂB

@@@@15-424-}10-T[rX10-421-16-192-B2


T@m[h̐

@@@entry_node(node_id,word,head,tail,code,xn)
@@@make_nodes(str,xn)


entry_node(node_id,word,head,tail,code,xn)

@iϐj
    char   word[MAXLEN]@@@ `ԑfm[hƂēo^`ԑf̕\L
    int    *node_id           `ԑfm[ḧAԍ
    int    head@@@@@@   o^`ԑf̐擪ʒu
@@int    tail               o^`ԑf̖ʒu
@@int    code               o^`ԑf̌`ԑfރR[h
    struct node xn[MAXNODE]@ `ԑfm[h̔zi`ԑflbg[Nj

@i@\j
@E`ԑfwordi擪ʒuheadAʒutailA`ԑfR[hcodejA`
@@fm[h̔zvfxn[node_id]֓o^B

@EȀɓĂ͂܂Ƃ͓o^ȂB
@@@(1) [Uǉ̍폜f[^zminusdataɓo^Ă
@@@(2) ̌`ԑfzxnɓo^ς݂ł
@@@(3) wordЂ炪ȂP̖ł

@EɊւĂ͎኱̃q[XeBNXpāAKvɉāuVɓo^
@@Ałɂ`ԑfm[h̃R[hύXvƂsB


make_nodes(str,xn)

@iϐj
    char str[MAXIN]           ̑ΏۂƂȂ͕
    struct node xn[MAXNODE]   `ԑfm[h̔zi`ԑflbg[Nj

@i@\j
@E͂ꂽstrɊ܂܂邷ׂĂ̌`ԑfoA`ԑfm[
@@h̔zxn֓o^B

@E`ԑf̒óÂUʂ̕@ɂčsB
@@@(1) TRIE\̌
@@@(2) [Uǉ̌
@@@(3) Zp܂݂͊̂Ȃ镶̒o
@@@(4) J^Jî݂Ȃ镶̒o
@@@(5) At@xbĝ݂Ȃ镶̒o
@@@(6) J^Jî݂Ȃ镶̒o

@ETRIE\ɂ[Uǉɂo^ĂȂJ^Jî݂Ȃ镶
@@́A֋XIɌŗLƂ݂ȂAZp܂݂͊̂Ȃ镶́A
@@Ƃ݂ȂďsĂB


U@ڑ̃`FbN

@@@check_and_make_net(x)
@@@int check_disjunction(initstr,x)


check_and_make_net(x)

@iϐj
    struct node xn[MAXNODE]   `ԑfm[h̔zi`ԑflbg[Nj

@i@\j
@E`ԑfm[h̔zx̗vfׂ̂Ă̑gɂĐڑ𒲂ׁA`ԑflbg
@@[N𐶐B

@E܂Ǎ`ԑfm[hx[i]̖ʒux[i].tail擪ʒuƂ`ԑfm[
@@hTBɂ͐擪ʒue[uheadtablp΂悢BȂ킿A
@@ʒue[u̗vfł郊Xgheadtabl[x[i].tail]̍\vfA
@@ƂĂ`ԑfm[hɑBɁǍ`ԑfm[hׂĂ
@@āǍ`ԑfm[hx[i]ƁA`ԑfރR[hڑ\ǂ𒲂
@@Bڑ\Ȃ΁Ãm[hẼm[hփ|C^𒣂B


int check_disjunction(initstr,x)

@iϐj
    char   initstr[MAXIN]     ̑ΏۂƂȂ͕
    struct node xn[MAXNODE]   `ԑfm[h̔zi`ԑflbg[Nj

@i@\j
@EinitstrɂāA`ԑf̕т炩ɓr؂ĂʒuԂB

@EႦ΁Au傫łvƂinitstrɈnƁAucłvƂ`
@@ԑfȂAuvɍڑ\Ȍ`ԑfucŁvȂB8oC
@@gڂŌ`ԑf̕тr؂Ă̂ŁAl8lƂĕԂB


