﻿功能:kakuro数独求解(数和求解)

格式:

kakuro(RightSum,DownSum,Data)

kakuro(RightSum,DownSum)

说明:

RightSum、DownSum、Data是同维数的矩阵变量,其中每个格子对应相应的kakuro数独格子里的数据

RightSum:代表右上角格子里的数据,其中数据大于0表示此格子里有右上角对应的数据,否则RightSum里的元素为0(表示没有右上角的数据),其中RightSum里的数据不能小于0,否则程序提醒出错.

DownSum:代表左下角格子里的数据,其中数据大于0表示此格子里有左下角对应的数据,否则DownSum里的元素为0(表示没有左上角的数据),其中DownSum里的数据不能小于0,否则程序提醒出错.

Data:代表方格里需要填写或者不需要填写的数据.当Data里的元素为0时表示此个方格是需要我们填写的数据,当Data里的数据小于0,表示此方格不需要填写任何数据,当对应元素小于10而大于0表示此方格里必须是此数据,当元素大于9,程序会提醒出错.注意,本方格可能会受RightSum与DownSum变量的影响,因为RightSum与DownSum中非0元素对应到Data元素时会把Data里的元素变为负数,即那个方格是不填写任何数据的.注意在第二种书写格式中,Data默认是除了RightSum、DownSum中非0格全部需要填写的,即Data里默认全为0.

注意:如果有多组解,只返回一组解,且返回值对应于数组中位置.你可能会发现返回了非1-9之间的数据,那是因为那个位置处是不用填写的数据(一般返回的是负数或者0),如果有空格处返回的是10,表示你这个kakuro数独不是很规范

PS:具体用法请参看例子

例子:

1、如下图,请依照kakuro数独的规则,在空格处填入相应的数据
{<http://img0.ph.126.net/IY5PObDVJcXsv-uyPGmVzQ==/1357835287670004350.jpg>}
//则我们使用本程序时建立的模型如下
data=
[-1   -1    -1     -1    -1    -1    -1    -1

 -1    0     0     -1    -1     0     0     0
 -1    0     0     -1     0     0     0     0
 -1    0     0      0     0     0    -1    -1
 -1   -1     0      0    -1     0     0    -1
 -1   -1    -1      0     0     0     0     0
 -1    0     0      0     0    -1     0     0
 -1    0     0      0    -1    -1     0     0 ]
down=
[0    23    30     0     0    27   12   16
 0    0      0     0    17    0    0    0
 0    0      0    15     0    0    0    0
 0    0      0     0     0    0    12   0
 0    0      0     0     7    0    0    7
 0    11    10     0     0    0    0    0
 0    0      0     0     0    0    0    0
 0    0      0     0     0    0    0    0]
right=
[ 0    0    0    0    0    0    0    0
 16    0    0    0    24   0    0    0
 17    0    0    29   0    0    0    0
 35    0    0    0    0    0    0    0
  0    7    0    0    8    0    0    0
  0    0    16   0    0    0    0    0
 21    0    0    0    0    5    0    0
  6    0    0    0    0    3    0    0]

kakuro(right,down,data)//按回车后得到如下的结果,其图形如下
ans =
[ -1    -1    -1    -1    -1    -1    -1    -1
  -1     9     7    -1    -1     8     7     9
  -1     8     9    -1     8     9     5     7
  -1     6     8     5     9     7    -1    -1
  -1    -1     6     1    -1     2     6    -1
  -1    -1    -1     4     6     1     3     2
  -1     8     9     3     1    -1     1     4
  -1     3     1     2    -1    -1     2     1 ]
{<http://img7.ph.126.net/NRoHpXhJ17iU8vsX99cglw==/6597991157400085907.jpg>}
2、如下图,请依照kakuro数独的规则,在空格处填入相应的数据,但是唯一不同的是,图中的一个空格我指定了必须是我指定的数据,如下图红色字体标示出来的,那现在求解的模型中,我们依然使用上面例子1的Down与Right里面的数据,唯一不同的是,把data里的第4行3列里的数据0换成8即可,如下
{<http://img9.ph.126.net/GTt1eUAY1qor5W1QsJOx_g==/6597188513913185589.jpg>}
data=
[-1   -1    -1     -1    -1    -1    -1    -1
 -1    0     0     -1    -1     0     0     0
 -1    0     0     -1     0     0     0     0
 -1    0     8      0     0     0    -1    -1
 -1   -1     0      0    -1     0     0    -1
 -1   -1    -1      0     0     0     0     0
 -1    0     0      0     0    -1     0     0
 -1    0     0      0    -1    -1     0     0 ]

kakuro(right,down,data)//按回车后得到如下的结果
ans =
[ -1    -1    -1    -1    -1    -1    -1    -1
  -1     9     7    -1    -1     8     7     9
  -1     8     9    -1     8     9     5     7
  -1     6     8     5     9     7    -1    -1
  -1    -1     6     1    -1     2     6    -1
  -1    -1    -1     4     6     1     3     2
  -1     8     9     3     1    -1     1     4
  -1     3     1     2    -1    -1     2     1 ]

//By2012/8/31