为什么要详解?主要是因为我自己看的时候都花了很长时间才明白。
题目:
在9(3 x 3)个方格的方阵中填入数字1到N(N>=10)内的9个数字,使所有相邻两方格内的两个整数之和为质数(素数),试求出所有满足要求的数字填充方案。
先画图:(3*3表格)
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
由于一维数组更好处理,所以变换成一维数组
a[10]:
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
数据结构 1)
int checkM[9][3]={ {-1},{0,-1},{1,-1},
{0,-1},{1,3,-1},{2,4,-1},
{3,-1},{4,6,-1},{5,7,-1}};
这是干什么用的呢?
要是相邻方格的数字之和为质数,我们约定试探的时候按照[1…N]的顺序来试探。
这样的话,0号方格不需要和任何单元格匹配,因为他是第一个,所以checkM[0]={-1,0,0};
这说明a[0]不需要任何试探
再看i=1的时候
单元格1和0相邻,所以在单元格1中填入数字的时候要与0号格内的数字之和为质数。
所以checkM[1] = {0,-1,0}; 【注】匹配的时候看到-1就不会继续向下走了。
在看i=4的时候
格4和格1,3,5,7相邻,但是由于我们约定了顺序,只需验证1,3是否合格即可,所以checkM[4]={1,3,-1};
……
上图易于理解:
0 |
1 |
2 |