एक सरणी को देखते हुए एक [] जिसमें एन पूर्णांक होते हैं, चुनौती है कि सूचकांक के विभिन्न क्रमपरिवर्तन को मुद्रित करना है जैसे कि उन सूचकांकों के मान एक गैर-घटते अनुक्रम बनाते हैं। प्रिंट -1 यदि संभव न हो तो।
उदाहरण
Input: arr[] = {2,5,6,2,2,2,2}, k = 4
Output:
0 3 4 5 6 1 2
3 0 4 5 6 1 2
0 3 4 5 6 1 2
3 0 4 5 6 1 2 दिए गए सरणी को क्रमबद्ध करें और प्रत्येक तत्व के मूल सूचकांकों पर नज़र रखें। यह एक आवश्यक क्रमपरिवर्तन देता है। अब यदि कोई 2 निरंतर तत्व समान हैं तो उन्हें एक और क्रमपरिवर्तन प्राप्त करने के लिए स्वैप किया जा सकता है। इसी तरह, तीसरा क्रमपरिवर्तन उत्पन्न किया जा सकता है।
एल्गोरिदम
START
Step 1 -> Declare Function void indice(int n, pair<int, int> array[])
Loop For int i=0 and i<n and i++
Print array[i].second
End
Step 2 -> Declare Function void permutation(int n, int a[], int k)
Use STL pair<int, int> arr[n]
Loop for int i=0 and i<n and i++
Set arr[i].first = a[i]
Set arr[i].second = i
End
Call sort(arr, arr + n)
Declare int count to 1
Loop For int i=1 and i<n and i++
IF (arr[i].first == arr[i - 1].first)
Increment count by 1
End
End
IF count < k
Return -1
End
Loop For int i = 0 and i < k – 1 and i++
Call indice(n, arr)
Loop For int j = 1 and j < n and j++
IF arr[j].first == arr[j - 1].first
Call swap(arr[j], arr[j - 1])
Break
End
End
End
Call indice(n, arr)
Step 3 -> In main()
Declare array a[]={2,5,6,2,2,2,2}
Declare int n= sizeof(a)/sizeof(a[0])
Declare int k=4
Call permutation(n,a,k)
STOP उदाहरण
#include <bits/stdc++.h>
using namespace std;
void indice(int n, pair<int, int> array[]){
for (int i = 0; i < n; i++)
cout << array[i].second << " ";
cout << endl;
}
void permutation(int n, int a[], int k){
pair<int, int> arr[n];
for (int i = 0; i < n; i++){
arr[i].first = a[i];
arr[i].second = i;
}
sort(arr, arr + n);
int count = 1;
for (int i = 1; i < n; i++)
if (arr[i].first == arr[i - 1].first)
count++;
if (count < k){
cout << "-1";
return;
}
for (int i = 0; i < k - 1; i++){
indice(n, arr);
for (int j = 1; j < n; j++){
if (arr[j].first == arr[j - 1].first){
swap(arr[j], arr[j - 1]);
break;
}
}
}
indice(n, arr);
}
int main(){
int a[] ={2,5,6,2,2,2,2};
int n = sizeof(a) / sizeof(a[0]);
int k = 4;
permutation(n, a, k);
return 0;
} आउटपुट
यदि हम उपरोक्त प्रोग्राम चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा
0 3 4 5 6 1 2 3 0 4 5 6 1 2 0 3 4 5 6 1 2 3 0 4 5 6 1 2