TYVJ 1085 派对 解题报告
直接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; }