/* ---------------------------------------------------------- 
%   (C)1992 Institute for New Generation Computer Technology 
%       (Read COPYRIGHT for detailed information.) 
----------------------------------------------------------- */
ICOT$B%U%j!<%=%U%H%&%'%"(B No.33  $B!X7ABVAG<-=q!Y(B

---------------------------------------------------------------
$BC10L@Z$j%W%m%0%i%`!!!A$=$N#5!&%5%V%k!<%A%s4X?t(B(2)$B!A(B

$BK\%I%-%e%a%s%H$O(B, "sepa_s.c" $B$N$&$A!"<!$N$h$&$J5!G=$N4X?t$K$D$$$F@bL@(B
$B$9$k!#(B

$B!!!!!!%j%9%H$N=PNO(B
$B!!!!(B  $B@hF,J8;z0LCV%F!<%V%k$N=hM}(B
$B!!!!(B  $B2r$N=PNO(B
$B!!!!(B  $B2r$NC5:w(B
$B!!!!(B  $B%N!<%I$N@8@.(B
$B!!!!(B  $B@\B3$N%A%'%C%/(B


$B#1!!%j%9%H$N=PNO(B

$B!!!!(B    +-- print_ilist(x)
$B!!!!(B    |
$B!!!!(B  print_xnode(x)

$B!!!!(B  print_suppldata()


print_ilist(x)

$B!!!JJQ?t!K(B
    struct ilist *x   $B@0?tCM$N%j%9%H(B

$B!!!J5!G=!K(B
$B!!!&%j%9%H(Bx$B$NMWAG$r@hF,$+$i=g$KKvHx$^$G=PNO$9$k!#(B


print_xnode(x)

$B!!!JJQ?t!K(B
    struct node x[MAXNODE]$B!!7ABVAG%M%C%H%o!<%/(B

$B!!!J5!G=!K(B
$B!!!&7ABVAG%M%C%H%o!<%/(Bx$B$r9=@.$9$k$9$Y$F$N7ABVAG%N!<%I!J7ABVAG%N!<%I$NG[Ns(Bx$B$NA4(B
$B!!!!MWAG!K$r2hLL$X=PNO$9$k!#(B

$B!!!&=PNO$N7A<0$ONc$($P$D$.$N$h$&$K$J$k!#(B

$B!!!!!!!!(B>#0:$B?^=q4[(B (10, 0-3)  { $B!#(B(#5),  NIL }
$B!!!!!!!!(B>#1:$B?^=q(B (10, 0-2)  { $B4[(B(#4),  NIL }
$B!!!!!!!!(B>#2:$B?^(B (10, 0-1)  { $B=q(B(#3),  NIL }
$B!!!!!!!!(B>#3:$B=q(B (10, 1-2)  { $B4[(B(#4),  NIL }
$B!!!!!!!!(B>#4:$B4[(B (490, 2-3)  { $B!#(B(#5),  NIL }
$B!!!!!!!!(B>#5:$B!#(B (2, 3-4)  { NIL }


print_suppldata()

$B!!!J5!G=!K(B
$B!!!&%f!<%6JdB-<-=q$+$iFI$_9~$s$@%G!<%?$r$9$Y$F2hLL$X=PNO$9$k!#=PNO$O!"DI2C$5$l(B
$B!!!!$?7ABVAG!JG[Ns(Bplusdata$B!K!":o=|$5$l$?7ABVAG!JG[Ns(Bminusdata$B!K$N=g$K9T$&!#(B


$B#2!!@hF,J8;z0LCV%F!<%V%k$N=hM}(B

$B!!!!!!(Binit_headtabl()
$B!!!!!!(Bjoin_headtabl(head,id)

$B!!!!(B    +-- print_ilist2(x)
$B!!!!(B    |
$B!!!!!!(Bprint_headtabl(imax)


join_headtabl(head,id)

$B!!!JJQ?t!K(B
    int  head   $B7ABVAG$N=P8=$7$F$$$k@hF,J8;z0LCV(B
    int  id     $B7ABVAG%N!<%I$N0lO"HV9f(B

$B!!!J5!G=!K(B
$B!!!&7ABVAG%N!<%I(Bxnode[id]$B$N0lO"HV9f(Bid$B$r!"G[NsMWAG(Bheadtabl[head]$B!J!a@0?t$N%j%9(B
$B!!!!%H!K$K$D$J$2$k!#(B

$B!!!&(Bheadtabl$B$O@hF,J8;z0LCV%F!<%V%k$G$"$j!"7ABVAG%M%C%H%o!<%/$NC5:w8zN($r8~>e$9(B
$B!!!!$k$?$a$K;HMQ$9$k!#(Bhead$B$O!"7ABVAG%N!<%I(Bxnode[id]$B$N=i4|J8;zNs(Binitstr$BCf$N0LCV(B
$B!!!!$r<($9CM$G$"$k!#(B


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

$B!!!JJQ?t!K(B
    int imax    $B=PNO$9$k@hF,J8;z0LCV%F!<%V%k$N@hF,0LCV$N>e8BCM(B

$B!!!J5!G=!K(B
$B!!!&@hF,J8;z0LCV%F!<%V%k(Bheadtabl$B$NMWAG!J@0?t$N%j%9%H!K$r!"(Bheadtabl[0]$B$+$i(B
$B!!!!(Bheadtabl[imax]$B$^$G=PNO$9$k!#(B


$B#3!!2r$N=PNO(B

$B!!!!!!(Bprint_all_solutions()
$B!!!!!!(Bprint_best_solutions()


print_all_solutions()

$B!!!JJQ?t!K(B
    struct slist *l$B!!(B $B2r$NJ8;zNs$N%j%9%H(B

$B!!!J5!G=!K(B
$B!!!&J8;zNs$N%j%9%H(Bsolution$B$K$D$J$,$C$F$$$kJ8;zNs!J!a2r!K$9$Y$F$r!"2hLL$*$h$S%U(B
$B!!!!%!%$%k$X=PNO$9$k!#(B


print_best_solutions()

$B!!!JJQ?t!K(B
    struct slist *l$B!!(B $B2r$NJ8;zNs$N%j%9%H(B
    int nbest         $B;XI8CM$,:G>.$N2r$N8D?t(B
    int nprint        $B=PNO$7$?2r$N8D?t(B
    int n             $B0l;~E*$JJQ?t(B

$B!!!J5!G=!K(B
$B!!!&J8;zNs$N%j%9%H(Bsolution$B$K$D$J$,$C$F$$$kJ8;zNs!J!a2r!K$N$&$A:GE,2r$N$_$r!":G(B
$B!!!!Bg(Bmax_nbest$B8D=PNO$9$k!#=PNO@h$O2hLL$*$h$S%U%!%$%k!#(B


$B#4!!2r$NC5:w(B

$B!!!!!!(B  +-- trace_net(x,s,magic,flag)
$B!!!!(B    |
$B!!!!!!(Bfind_solutions(x)


trace_net(x,s,magic)

$B!!!JJQ?t!K(B
    struct node x   $BC5:w$N=PH/E@$H$J$k7ABVAG%N!<%I(B
    char s[]$B!!!!!!!!2r$NJ8;zNs!J:F5"8F=P$K;HMQ!K(B
    int magic $B!!!!!!2r$NE,@Z$5$N;XI8CM(B

$B!!!J5!G=!K(B
$B!!!&7ABVAG%N!<%I(Bx$B$r=PH/E@$H$7$F1&J}8~$X7ABVAG%M%C%H%o!<%/$r$?$I$j!"J8Kv$KE~C#(B
$B!!!!$7$?$i!"J8F,$+$i$=$3$^$G$N%M%C%H%o!<%/>e$NF;6Z$rJ8;zNs$K$7$F!"2r$N%j%9%H(B
$B!!!!(Bsolution$B$X$D$J$2$k!#(B

$B!!!&J8Kv$KE~C#$;$:!"<!$N$$$:$l$+$N>r7o$K$"$F$O$^$l$PC5:w$rCf;_$9$k!#(B
$B!!!!!!(B(1) $B%M%C%H%o!<%/$r(Bmax_pass_time$B2s$rD6$($F$?$I$C$?>l9g(B
$B!!!!!!(B(2) magic$B$NCM$,!"$=$l$^$G$N(Bmagic$B$N:G>.CM$rD6$($?>l9g(B
$B!!!!!!(B(3) $B$=$N%N!<%I$+$i1&$X$?$I$l$J$$>l9g(B

$B!!!&J8Kv$KE~C#$;$:!">e5-$N>r7o$K$"$F$O$^$i$J$1$l$P!"J8F,$+$i$=$3$^$G$NF;6Z!J!a(B
$B!!!!J8;zNs!K(Bs$B$r@8@.$7!"(Btrace_net$B$r:F5/E*$K8F$S=P$9!#(B

$B!!!&(Bmagic$B$O!"2r@O7k2L$NE,@Z$5$r<($9;XI8CM$G!"$=$NCM$O<!$N<0$K$h$C$F7W;;$5$l$k!#(B

$B!!(B    $B!!(Bmagic = $B<+N)8l$N8D?t(B*100 + $BIUB08l(Bor$B@\<-(Bor$BFIE@$N8D?t(B

$B!!!&@8@.$5$l$k2r$NJ8;zNs$N7A<0$ONc$($P$D$.$N$h$&$K$J$k!#(B

$B!!!!!!!!El5~(B15-$B$N(B424-$B?^=q4[(B10-$B%5!<%S%9(B10-$B$r(B421-$B8&5f(B16-$B$9$k(B192-$B!#(B2


$B#5!!%N!<%I$N@8@.(B

$B!!!!!!(Bentry_node(node_id,word,head,tail,code,xn)
$B!!!!!!(Bmake_nodes(str,xn)


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

$B!!!JJQ?t!K(B
    char   word[MAXLEN]$B!!!!!!(B $B7ABVAG%N!<%I$H$7$FEPO?$7$?$$7ABVAG$NI=5-(B
    int    *node_id           $B7ABVAG%N!<%I$N0lO"HV9f(B
    int    head$B!!!!!!!!!!!!(B   $BEPO?$7$?$$7ABVAG$N@hF,0LCV(B
$B!!!!(Bint    tail               $BEPO?$7$?$$7ABVAG$NKvHx0LCV(B
$B!!!!(Bint    code               $BEPO?$7$?$$7ABVAG$N7ABVAGJ,N`%3!<%I(B
    struct node xn[MAXNODE]$B!!(B $B7ABVAG%N!<%I$NG[Ns!J7ABVAG%M%C%H%o!<%/!K(B

$B!!!J5!G=!K(B
$B!!!&H/8+$7$?7ABVAG(Bword$B!J@hF,0LCV(Bhead$B!"KvHx0LCV(Btail$B!"7ABVAG%3!<%I(Bcode$B!K$r!"7ABV(B
$B!!!!AG%N!<%I$NG[NsMWAG(Bxn[node_id]$B$XEPO?$9$k!#(B

$B!!!&$?$@$7!"<!$N>r7o$KEv$F$O$^$k$H$-$OEPO?$7$J$$!#(B
$B!!!!!!(B(1) $B%f!<%6DI2C<-=q$N:o=|%G!<%?G[Ns(Bminusdata$B$KEPO?$5$l$F$$$k(B
$B!!!!!!(B(2) $BF10l$N7ABVAG$,G[Ns(Bxn$B$KEPO?:Q$_$G$"$k(B
$B!!!!!!(B(3) word$B$,$R$i$,$J#1J8;z$NL>;l$G$"$k(B

$B!!!&L>;l$K4X$7$F$O<c43$N%R%e!<%j%9%F%#%/%9$rMQ$$$F!"I,MW$K1~$8$F!V?7$?$KEPO?$O(B
$B!!!!$;$:!"$9$G$K$"$k7ABVAG%N!<%I$N%3!<%I$rJQ99$9$k!W$H$$$&A`:n$r9T$&!#(B


make_nodes(str,xn)

$B!!!JJQ?t!K(B
    char str[MAXIN]           $B=hM}$NBP>]$H$J$kF~NOJ8;zNs(B
    struct node xn[MAXNODE]   $B7ABVAG%N!<%I$NG[Ns!J7ABVAG%M%C%H%o!<%/!K(B

$B!!!J5!G=!K(B
$B!!!&F~NO$5$l$?J8;zNs(Bstr$B$K4^$^$l$k$9$Y$F$N7ABVAGJ8;zNs$r8+$D$1=P$7!"7ABVAG%N!<(B
$B!!!!%I$NG[Ns(Bxn$B$XEPO?$9$k!#(B

$B!!!&7ABVAGJ8;zNs$NCj=P$O!"<!$N#6DL$j$NJ}K!$K$h$C$F9T$&!#(B
$B!!!!!!(B(1) TRIE$B9=B$<-=q$N8!:w(B
$B!!!!!!(B(2) $B%f!<%6DI2C<-=q$N8!:w(B
$B!!!!!!(B(3) $B;;MQ?t;z$^$?$O4A?t;z$N$_$+$i$J$kJ8;zNs$NCj=P(B
$B!!!!!!(B(4) $B%+%?%+%J$N$_$+$i$J$kJ8;zNs$NCj=P(B
$B!!!!!!(B(5) $B%"%k%U%!%Y%C%H$N$_$+$i$J$kJ8;zNs$NCj=P(B
$B!!!!!!(B(6) $B%+%?%+%J$N$_$+$i$J$kJ8;zNs$NCj=P(B

$B!!!&(BTRIE$B9=B$<-=q$K$b%f!<%6DI2C<-=q$K$bEPO?$5$l$F$$$J$$%+%?%+%J$N$_$+$i$J$kJ8;z(B
$B!!!!Ns$O!"JX59E*$K8GM-L>;l$H$_$J$7!";;MQ?t;z$^$?$O4A?t;z$N$_$+$i$J$kJ8;zNs$O!"(B
$B!!!!?t;l$H$_$J$7$F=hM}$r9T$C$F$$$k!#(B


$B#6!!@\B3$N%A%'%C%/(B

$B!!!!!!(Bcheck_and_make_net(x)
$B!!!!!!(Bint check_disjunction(initstr,x)


check_and_make_net(x)

$B!!!JJQ?t!K(B
    struct node xn[MAXNODE]   $B7ABVAG%N!<%I$NG[Ns!J7ABVAG%M%C%H%o!<%/!K(B

$B!!!J5!G=!K(B
$B!!!&7ABVAG%N!<%I$NG[Ns(Bx$B$NMWAG$N$9$Y$F$NAH9g$;$K$D$$$F@\B3$rD4$Y!"7ABVAG%M%C%H(B
$B!!!!%o!<%/$r@8@.$9$k!#(B

$B!!!&$^$:!":8J}$N7ABVAG%N!<%I(Bx[i]$B$NKvHx0LCV(Bx[i].tail$B$r@hF,0LCV$H$9$k7ABVAG%N!<(B
$B!!!!%I$rC5$9!#$3$l$K$O@hF,J8;z0LCV%F!<%V%k(Bheadtabl$B$rMQ$$$l$P$h$$!#$9$J$o$A!"@h(B
$B!!!!F,J8;z0LCV%F!<%V%k$NMWAG$G$"$k%j%9%H(Bheadtabl[x[i].tail]$B$N9=@.MWAG$r0lO"HV(B
$B!!!!9f$H$7$F$b$D7ABVAG%N!<%I$,$3$l$KAjEv$9$k!#$D$.$K!"$3$N7ABVAG%N!<%I$9$Y$F$K(B
$B!!!!$D$$$F!":8J}$N7ABVAG%N!<%I(Bx[i]$B$H!"7ABVAGJ,N`%3!<%I$,@\B32DG=$+$I$&$+$rD4$Y(B
$B!!!!$k!#@\B32DG=$J$i$P!":8J}$N%N!<%I$+$i1&J}$N%N!<%I$X%]%$%s%?$rD%$k!#(B


int check_disjunction(initstr,x)

$B!!!JJQ?t!K(B
    char   initstr[MAXIN]     $B=hM}$NBP>]$H$J$kF~NOJ8;zNs(B
    struct node xn[MAXNODE]   $B7ABVAG%N!<%I$NG[Ns!J7ABVAG%M%C%H%o!<%/!K(B

$B!!!J5!G=!K(B
$B!!!&=i4|J8;zNs(Binitstr$B$K$D$$$F!"7ABVAG$NJB$S$,L@$i$+$KES@Z$l$F$$$k0LCV$rJV$9!#(B

$B!!!&Nc$($P!"!VBg$-$$$G$s!W$H$$$&J8;zNs$r(Binitstr$B$K0z$-EO$9$H!"!V!D$G$s!W$H$&7A(B
$B!!!!BVAG$,$J$/!"$+$D!V$s!W$K:8@\B32DG=$J7ABVAG!V!D$G!W$b$J$$!#$7$?$,$C$F(B8$B%P%$(B
$B!!!!%HL\$G7ABVAG$NJB$S$,ES@Z$l$F$$$k$N$G!"@0?tCM(B8$B$,CM$H$7$FJV$5$l$k!#(B


