一道逻辑组合题的分析与求解
老虎、狐狸、猴子各三只站在 3×3 的方格表里,每个格子里站一只动物。老虎总是说真话, 狐狸总是说假话,猴子有时候说真话有时候说假话。动物管理员问了这 9 只动物 3 个问题:与你相邻的有老虎吗?与你相邻的有狐狸吗?与你相邻的有猴子吗?每一个问题都恰好有 7 只动物说有,2 只动物说没有。求一共有多少种可能的排列方式。(有公共边的方格视为相邻,方格表不可旋转或对称)
分析:
用一条直连线表达相邻,即每两只相邻的动物都用一条线段直连,则会连出一个“田”字图案,9只动物各占“田”字图案上的一个交点,由对称性将这9个点划分为4个角点、4个边心点和一个中心点。
用g、x、k分别指代老虎、狐狸、猴子。三个问题相应由Qg、Qx、Qk指代(比如Qg指代“与你相邻的有老虎吗?”)。用Y和N分别指代肯定回答和否定回答。
由题设知:
{1}:3只g之间至少有一条直连线,否则它们对Qg的回答都是N;
{2}:3只x之间至多有一条直连线,否则3只x对Qx的回答都是N。
对 {1} 的情形细分为两种子情形:
{1-1}:3只g之间恰有一条直连线
{1-2}:3只g之间恰有两条直连线
先考察 {1-1} 的情形,由对称性,直连的一对g在“田”字图案上的位置关系只可能是一个角点和一个边心点相邻或是一个边心点和中心点相邻。
先看第一种相邻,可以用下面的阵形[1]表示:
ggu
[1] uuv
vvv
第一行标示出一对直连(即相邻)的g,第三只g(即孤立的g)只能出现再某个标示v的位置,而不能在标示u的位置出现,它对Qg的回答是N。
把第二行那个v换成g,得到:
ggu
[2] uug
vvv
这时,和3个g都不相邻的位置只有第三行的头两个v,这两个位置都要填上x(否则至少有两个x和g相邻,导致对Qg的回答为N的总数多于2,不符合题设要求);而由 {2} 可知剩下的x只能填到第一行的最右边的位置,于是得到:
ggx
[3] kkg
xxk
对于Qx的回答,3只g中有一个N,3只x中有两个N,说明阵列[3]所示的一类排列不符合题设要求。
回到阵列[1],依次考察把孤立的g替换到第三行的3个v的位置,做类似上述的阵列推演,分别有:
ggu ggu ggu ggk
[1] uuv => [4] uuv => [5] uux => [6] xkx
vvv gvv gvx gkx
阵列[6]中,3只x都有相邻的k,对于Qk的回答,至少有3个N,不符合要求;
ggu ggu ggu
[1] uuv => [7] uuv => [8] uux
vvv vgv vgv
阵列[8]只有一个位置不和g相邻,该位置填上x,说明还有2只x必然和g相邻, 对于Qg的否定回答总数多于2,同样不符合要求;
ggu ggu ggu
[1] uuv => [9] uuv => [10] uuv
vvv vvg xvg
阵列[10]和阵列[8]一样只有一个位置不和g相邻,因此也不符合要求。
以上说明, {1-1} 情形的第一种相邻全都不符合要求。
接着考察{1-1} 情形的第二种相邻:边心点和中心点相邻。同样可用阵列表示:
ugu
[11] ugu
vuv
此时孤立的g可填的位置只有第三行用v标示的两个角点位置,由对称性,考察其中一个即可:
ugu
[12] ugu
guv
另一个v填上x,还是会有两个x必然和g相邻,所以也不符合要求。
综上,{1-1}:3只g之间恰有一条直连线是不符合要求的。
以下进一步对 {1-2}:3只g之间恰有两条直连线 做细分考察。这种情形说明有一只g居于桥接的地位,按对称性又可划分为以下几种情形:
(a) 角点-边心点-角点
(b) 边心点-中心点-边心点
(c) 角点-边心点-中心点
先看 (a) 的情形,用阵列表示如下:
ggg
[13] uuu
vvv
剩余的第二行和第三行共有6个位置,会填上三只x和三只k。任取其中一只x,观察阵列[13]可知,在这6个位置中至少有两个位置和它是相邻的;而由 {2} 知,和该x相邻的x至多只有一只,因此这6个位置中必有一只k和该x相邻。这说明阵列[13]里每只x都有相邻的k,不符合要求。
再看 (b) 的情形,由对称性,用阵列表示有如下两种:
uuu ugu
[14] ggg [15] ggu
uuu uuv
阵列[14]里填进3只x都会和g相邻,显然不符合要求。
阵列[15]里只有一个位置不和g相邻,为避免3只x都填在和g相邻的位置,将v的位置填上x,这时另外2只x和3只k都和g相邻。2只x和g相邻,对Qg的回答为N的数目为2,而3只k都和g相邻,对Qg的回答至少有一个为N,因此阵列[15]也不符合要求。【加删除线部分参见尾注说明】
阵列[15]可以进一步推演为下列阵列之一:
xgx xgk xgk
[A1] ggk [A2] ggx [A3] ggk
kkx kkx xkx
xgk kgx kgx
[A4] ggk [A5] ggk [A6] ggk
kxx xkx kxx
kgk
[A7] ggx
xkx
阵列[A1]、[A3]、[A5]中,对于Qk,有1只g回答N,另有2只x回答N,不符合要求。
阵列[A2]中,对于Qk,有2只x回答N;对于Qg,有2只x回答N;对于Qx,有2只x回答N;符合要求。对阵列[A2]做连续翻转处理,又可以得到三个新的符合要求的阵列:
kgx xkk kxx
kgg xgg ggk
xxk kgx xgk
阵列[A4]中,对于Qk,有2只x回答N;对于Qg,有2只x回答N;对于Qx,有2只x回答N;符合要求。对阵列[A4]做连续翻转处理,同样可得到三个新的符合要求的阵列。
阵列[A6]、[A7]中,对于Qx,有1只g回答N,另有2只x回答N,不符合要求。
考察 (c) 角点-边心点-中心点 的情形,用阵列表示如下:
ggu
[16] ugu
vuv
两个v的位置至少一个要填上x,再分情形考察:
1、两个v的位置都填上x的情形,再结合 {2} 填上另一只x,得到如下的阵列之一:
ggx ggk ggk
[17] kgk [18] xgk [19] kgx
xkx xkx xkx
阵列[17]和[19]中,每个x都有相邻的k,不符合要求。
阵列[18]中,对于Qx,有一只g回答N,另有两只x回答N,不符合要求。
2、仅左下角的v位置填上x的情形,再结合 {2} 填上另两只x,得到如下的阵列之一:
ggx ggx ggx ggk ggk
[20] xgk [21] kgx [22] kgk [23] xgx [24] kgx
xkk xkk xxk xkk xxk
阵列[20]中, 对于Qk,两只g回答N,另有两只x回答N,不符合要求。
阵列[21]和[23]中,对于Qk,一只g回答N,又有两只x也回答N,不符合要求。
阵列[22]中,三个x都有相邻的k,不符合要求。
阵列[24]中,对于Qx,有两只g回答N,另有两只x回答N,不符合要求。
3、仅右下角的v位置填上x的情形,再结合 {2} 填上另两只x,得到如下的阵列之一:
ggx ggx ggk ggk
[26] xgk [27] kgk [28] xgx [29] xgk
kkx kxx kkx kxx
这些阵列中,三个x都有相邻的k,不符合要求。
综上可知,所求排列方式有8个。
【尾注】:
最后说一下原文里的这一句话:猴子有时候说真话有时候说假话。出题者的意思应该是指任意一只猴子对任意一个问题的回答可能是如实回答(就像老虎那样),也可能与事实相反(就像狐狸那样),而且这个回答和该猴子对其它问题的回答以及其它猴子对任意问题的回答都是独立的,完全没有关联关系。
如果把原文里的这句话改为:三只猴子对每一个问题的回答中至少一个为真话且至少一个为假话,那这个题所求的排列方式种数就会是0。