早教吧 育儿知识 作业答案 考试题库 百科 知识分享

如图所示的8个格子中要填入1至8的数字,使得相邻的和对角线的数字之差不为1。试编写一个找出所有放法的程序THANKS代码~

题目详情
如图所示的8个格子中要填入1至8的数字,使得相邻的和对角线的数字之差不为1。试编写一个找出所有放法的程序THANKS 代码~
▼优质解答
答案和解析
#include #include "math.h" void Swap(int& a, int& b) { int temp = a; a = b; b = temp; } void Perm(int list[], int k, int m) { int i; if (k == m) { if(abs(list[1]-list[4])!=1 && abs(list[0]-list[2])!=1 && abs(list[2]-list[5])!=1 && abs(list[5]-list[7])!=1 && abs(list[3]-list[6])!=1 && abs(list[1]-list[2])!=1 && abs(list[2]-list[3])!=1 && abs(list[4]-list[5])!=1 && abs(list[5]-list[6])!=1 && abs(list[0]-list[1])!=1 && abs(list[0]-list[3])!=1 && abs(list[1]-list[5])!=1 && abs(list[2]-list[4])!=1 && abs(list[2]-list[6])!=1 && abs(list[3]-list[5])!=1 && abs(list[4]-list[7])!=1 && abs(list[6]-list[7])!=1) { for(i=0;i<=m;i++) printf("%d ",list[i]); printf("\n"); } } else for (i=k; i <= m; i++) { Swap (list[k], list[i]); Perm (list, k+1, m); Swap (list [k], list [i]); } } int main() { int s[]={1,2,3,4,5,6,7,8}; Perm(s, 0, 7); return 0; }