方格填数
如图,如下的10个格子,填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)一共有多少种可能的填数方案?
请填写表示方案数目的整数。
一个错误把另一个错误掩盖了,这是很大的问题 ,写程序一定要细致
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int a[10]={0,1,2,3,4,6,5,7,8,9};
int sum=0;
sort(a,a+10);
do{
if( abs(a[0]-a[1])!=1 && abs(a[0]-a[4])!=1 && abs(a[0]-a[5])!=1 && abs(a[0]-a[3])!=1
&& abs(a[1]-a[2])!=1 && abs(a[1]-a[5])!=1 && abs(a[1]-a[4])!=1 && abs(a[1]-a[6])!=1
&& abs(a[2]-a[5])!=1 && abs(a[2]-a[6])!=1
&& abs(a[3]-a[4])!=1 && abs(a[3]-a[7])!=1 && abs(a[3]-a[8])!=1
&& abs(a[4]-a[5])!=1 && abs(a[4]-a[9])!=1 && abs(a[4]-a[7])!=1 && abs(a[4]-a[8])!=1
&& abs(a[5]-a[6])!=1 && abs(a[5]-a[8])!=1 && abs(a[5]-a[9])!=1//一个错误把另一个错误掩盖了,这是很大的问题 , 之前写成了abs(a[6]-a[9])!=1
&& abs(a[6]-a[9])!=1
&& abs(a[7]-a[8])!=1
&& abs(a[8]-a[9])!=1
)
{
sum++;
}
/*
int i;
for(i=0;i<5;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
*/
//sum++;
}while(next_permutation(a,a+10));
cout<<sum;
return 0;
}
有冗余判断:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
int a[10]={0,1,2,3,4,6,5,7,8,9};
int sum=0;
sort(a,a+10);
do{
if( abs(a[0]-a[1])!=1 && abs(a[0]-a[4])!=1 && abs(a[0]-a[5])!=1 && abs(a[0]-a[3])!=1
&& abs(a[1]-a[0])!=1 && abs(a[1]-a[2])!=1 && abs(a[1]-a[5])!=1 && abs(a[1]-a[4])!=1 && abs(a[1]-a[6])!=1
&& abs(a[2]-a[1])!=1 && abs(a[2]-a[5])!=1 && abs(a[2]-a[6])!=1
&& abs(a[3]-a[0])!=1 && abs(a[3]-a[4])!=1 && abs(a[3]-a[7])!=1 && abs(a[3]-a[8])!=1
&& abs(a[4]-a[1])!=1 && abs(a[4]-a[1])!=1 && abs(a[4]-a[3])!=1 && abs(a[4]-a[5])!=1 && abs(a[4]-a[9])!=1 && abs(a[4]-a[7])!=1 && abs(a[4]-a[8])!=1
&& abs(a[5]-a[0])!=1 && abs(a[5]-a[1])!=1 && abs(a[5]-a[2])!=1 && abs(a[5]-a[4])!=1 && abs(a[5]-a[6])!=1 && abs(a[5]-a[8])!=1 && abs(a[5]-a[9])!=1
&& abs(a[6]-a[9])!=1 && abs(a[6]-a[1])!=1 && abs(a[6]-a[2])!=1 && abs(a[6]-a[5])!=1
&& abs(a[7]-a[8])!=1 && abs(a[7]-a[3])!=1 && abs(a[7]-a[4])!=1
&& abs(a[8]-a[9])!=1 && abs(a[8]-a[3])!=1 && abs(a[8]-a[4])!=1 && abs(a[8]-a[5])!=1 && abs(a[8]-a[7])!=1
&& abs(a[9]-a[4])!=1 && abs(a[9]-a[5])!=1 && abs(a[9]-a[6])!=1 && abs(a[9]-a[8])!=1
)
{
sum++;
}
/*
int i;
for(i=0;i<5;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
*/
//sum++;
}while(next_permutation(a,a+10));
cout<<sum;
return 0;
}