再发一下代码思路吧(其实昨天也发过了,但是被度娘连同链接一起吃了
):
定义二维数组 n(0 To 4, 0 To 4),数组行依次表示颜色、国籍、饮料、烟、宠物,列表示对应行的第几个值,比如 n(0, 0) 的意思就是“颜色是红色”,n(2, 3) 意思是“饮料是矿泉水”(嗯,楼主也说过了翻译会不同,这个对应楼主题目里的“开水”),具体对应关系在代码中的字符串数组给出;数组元素取值1~5,表示房子的位置,编号从左到右依次为1~5,比如 n(0, 0) = 1 表示“红房子在1号位置”
程序运行过程就是根据限制条件向数组中填数的过程,确实跟数独有点相似之处;具体用的算法是回溯法,在数表中逐格填入数字,每填入一个数字就与之前已填入的数字进行比较判断:首先,每一行不能有重复数字(1~5必须各出现一次);其次,就是题目中的“提示”条件了,比如“英国人住红房子”这个条件,英国人是n(1,0),红房子是n(0,0),这两者应该是同一座房子,即取值应该相等,满足n(0,0)=n(1,0),其他条件也是类似换算;而这些条件并不是每填一个数字就都需要判断,只有在填入与条件相关的后一个数字时需要判断,所以用了Select Case,根据当前填的是哪一个格子来决定需要判断哪个条件