直接DFS,没太多说的,比较简单的题目:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int num[10];
int put[10];
int used[10];
unsigned ans;
int n, k;
int ok(int a, int b)
{
if(abs(num[a] - num[b]) <= k){
return 1;
}
return 0;
}
void srch(int now)
{
int i;
if(now == n){
//最后还要判断一下now - 1是否和1满足这个条件
if(ok(0, put[now - 1])){
ans++;
}
return;
}
for(i = 0; i < n; i++){
if(!used[i] && ok(i, put[now - 1])){
used[i] = 1;
put[now] = i;
srch(now + 1);
used[i] = 0;
}
}
}
int main(int argc, char **argv)
{
int i;
scanf("%d%d", &n, &k);
for(i = 0 ; i < n; i++){
scanf("%d", &num[i]);
}
used[0] = 1;
srch(1);
printf("%d\n", ans);
return 0;
}