中国银行网上银行手机:如图所示的8个格子中要填入1至8的数字,使得相邻的和对角线的数字之差不为1。试编写一个找出所有放法的程序

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/30 11:56:50
THANKS 代码~
A1
A2 A3 A4
A5 A6 A7
A8 注意A1 A3 A6 A8 在一条线上

#include <stdio.h>
#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;
}