DFS:
#include <iostream>
#include <algorithm>
using namespace std;
int box[10];
int book[10];
int n,k;
void dfs(int box_id){
if(box_id == k+1){
printf("%d %d\n",box[1],box[2]);
return;
}
for(int card_id=1;card_id<=n;card_id++){
if(book[card_id]==0){
box[box_id] = card_id;
book[card_id] = 1;
dfs(box_id+1);
book[card_id] = 0;
}
}
}
int main(){
scanf("%d %d",&n,&k);
dfs(1);
return 0;
}
BFS:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int n, k;
struct State {
vector<int> box;
vector<int> book;
int box_id;
};
void bfs() {
queue<State> q;
State initial;
initial.box = vector<int>(k + 1, 0);
initial.book = vector<int>(n + 1, 0);
initial.box_id = 1;
q.push(initial);
while (!q.empty()) {
State current = q.front();
q.pop();
if (current.box_id == k + 1) {
printf("%d %d\n", current.box[1], current.box[2]);
continue;
}
for (int card_id = 1; card_id <= n; card_id++) {
if (current.book[card_id] == 0) {
State next = current;
next.box[current.box_id] = card_id;
next.book[card_id] = 1;
next.box_id = current.box_id + 1;
q.push(next);
}
}
}
}
int main() {
scanf("%d %d", &n, &k);
bfs();
return 0;
}