其中的数字表示图片格内图片对应于原始图片的序号,将其抽象成下面的网格图3。
0-1 |
11 |
22 |
33 |
44 |
55 |
66 |
77 |
88 |
99 |
1010 |
1111 |
1212 |
1313 |
1414 |
1515 |
图3抽象初始图
图3中红色背景的代表这个图片格内没有图片,其余颜色的代表图片格内有图片覆盖,图片格内的数据:AB ,其中A代表是第几个图片格,B代表的是格子内图片的序号(图2中的标号)。
这里定义两个数组:a[16],b[16]并将他们等值初始化:
For (i=1;i<16;i++)
{
a[i]=b[i]=i;
}
a[0]=b[0]=-1,设定没有图片为值-1。a数组用来记录未打乱的图片的分布规律,表达式a[i]=p,其中i表示是第几个图片格,p表示这个图片格内放的图片序号,其值对应于AB(a[A]=B)。
图3中没有图片的区域可以和其紧靠的左右上下区域(同在一条水平线上,或者同在一条垂直线上,如3和4就不合乎条件)交换图片,图片中酸橙色表示了可以进行交换的区域。在图3中,可以将图片0区域的图片和图片1区域及图片4区域中的某个交换,假定将0区域和1区域交换:此时用数组b来记录交换b[1]=-1,b[0]=1(图片格1内没有图片,图片格0中放的是图片序号1),交换后的效果如图4。
01 |
1-1 |
22 |
33 |
44 |
55 |
66 |
77 |
88 |
99 |
1010 |
1111 |
1212 |
1313 |
1414 |
1515 |
图4图片交换
再如:上图片中的1区域图片为空,说明他可以和(0,2,5)其一交换,这里我们假设是:1区域和5区域交换图片,效果如图5。
01 |
15 |
22 |
33 |
44 |
5-1 |
66 |
77 |
88 |
99 |
1010 |
1111 |
1212 |
1313 |
1414 |
1515 |
图5图片交换 即:b[1]=5,b[5]=-1。通过这种方式,记录下了交换过程中每个图片格内的图片序号。该数组b可以用以判断图片格内的图片是否发生过变化(如果b[i]!=a[i]说明图片格内图片变化了,因为在初始a数组和b数组时,都记录了图片的原始序列)。
|