方格填数-用next_permutation()全排列函数做的
2017-04-10 10:28
405 查看
方格填数
如图,如下的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;
}
相关文章推荐
- 关于全排列 next_permutation() 函数的用法
- next_permutation()函数 (数字1~10内实现全排列)
- STL快速全排列函数next_permutation与pre_permutation
- 关于全排列 next_permutation() 函数的用法
- 关于全排列 next_permutation() 函数的用法
- 蓝桥杯 方格填数 DFS 全排列 next_permutation用法
- 1384 全排列 next_permutation()函数
- STL之全排列next_permutation()函数的用法
- C++实现全排列(调用next_permutation)
- next_permutation()——全排列
- STL实现全排列 next_permutation
- next_permutation()函数 和 prev_permutation() 按字典序求全排列
- stl全排列 qsort+next_permutation(a,a+n) -->全排列 .
- 排列函数 prev_permutation和next_permutation的使用
- 1256 Anagram 全排列 next_permutation 用法
- 详解STL中next_permutation()函数实现
- 九度OJ 1120 全排列 -- 实现C++STL中next_permutation()
- 不知道会后悔的函数 next_permutation
- STL 中 next_permutation 的全排列思路
- stl全排列 qsort+next_permutation(a,a+n) -->全排列