[BOJ/C+]15663号NとM(9)
初めてこの問題を見た時は簡単に解決できると思ったのですが、繰り返しの制限を避けるためにちょっと手を焼いてしまいました. sort()関数を使用してアレイをソートします. 最後に追加された数と今回追加された数の値が同じであれば、繰り返しが発生し、出力すべきではありません. は、最後に追加された数字をxdxに格納し、新しい格納値と比較した. Code
Code #include <iostream>
#include <algorithm>
#define MAX 8
using namespace std;
int n, m;
int arr[MAX], result[MAX];
bool chk[MAX];
void Input(){
cin >> n >> m;
for (int i = 0; i < n; i++){
cin >> arr[i];
chk[i]=false;
}
sort(arr, arr + n);
}
void DFS(int cnt) {
if (cnt==m) {
for (int i=0; i<m; i++)
cout<<result[i]<<" ";
cout<<endl;
return;
}
int xdx = 0;
for (int i=0; i<n; i++) {
if (!chk[i]&&arr[i]!=xdx) {
result[cnt]=arr[i];
xdx=result[cnt];
chk[i]=true;
DFS(cnt+1);
chk[i]=false;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
DFS(0);
return 0;
}
Reference
この問題について([BOJ/C+]15663号NとM(9)), 我々は、より多くの情報をここで見つけました
https://velog.io/@xx0hn/BOJ-C-15663번-N과-M-9
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <iostream>
#include <algorithm>
#define MAX 8
using namespace std;
int n, m;
int arr[MAX], result[MAX];
bool chk[MAX];
void Input(){
cin >> n >> m;
for (int i = 0; i < n; i++){
cin >> arr[i];
chk[i]=false;
}
sort(arr, arr + n);
}
void DFS(int cnt) {
if (cnt==m) {
for (int i=0; i<m; i++)
cout<<result[i]<<" ";
cout<<endl;
return;
}
int xdx = 0;
for (int i=0; i<n; i++) {
if (!chk[i]&&arr[i]!=xdx) {
result[cnt]=arr[i];
xdx=result[cnt];
chk[i]=true;
DFS(cnt+1);
chk[i]=false;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
DFS(0);
return 0;
}
Reference
この問題について([BOJ/C+]15663号NとM(9)), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/BOJ-C-15663번-N과-M-9テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol