私はちょうどこのような問題を見つけます
「N 個の異なる整数を与えてください。隣接するすべての数値のペアの差が 1 より大きい異なる数列がいくつあるか知っていますか?」
そして、整数が「1 2 3」の場合、答えは 0、整数が「5 3 1」の場合、答えは 6、「1 3 5」「1 5 3」「3 1 5」の場合3 5 1" "5 1 3" "5 3 1" は問題を満たしています。できることはすべて試しましたが解決できませんでした。私の質問は、それを解決するアルゴリズムをどのように書くかです。
ありがとうございました。
これが私のプログラムです
int n;bool vi[30];int a[30];int b[30];int counter = 0;
void dfs(int k)
{
if ( k == n)
{
for (int i = 2; i <= n; i ++)
if (fabs(b[i] - b[i - 1]) <= 1) return ;
counter ++;
return ;
}
for (int i = 0; i < n; i ++)
{
if (!vi[i])
{
b[k + 1] = a[i];
vi[i] = true;
dfs(k + 1);
vi[i] = false;
}
}
}
int main (void)
{
cin >> n;
for (int i = 0; i < n; i ++)
cin >> a[i];
memset(vi, 0, sizeof(vi));
for (int i = 0; i < n; i ++)
{
vi[i] = true;b[1] = a[i];dfs(1);vi[i] = false;
}
cout << counter << endl;
return 0;
}