-->
当前位置:首页 > 题库

函数题:全排列(无输出顺序要求)-队列式广度优先搜索

Luz4年前 (2022-05-25)题库638
以下裁判程序输出正整数1~n的全排列。

本题需要实现如下函数bfs()并在其中调用裁判测试程序中的EnQueue()函数,完成使用队列式广度优先搜索全排列问题的排列树。



### 函数接口定义:
c++
void bfs(); //广度优先搜索排列树


### 裁判测试程序样例:
c++
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

vector<int> nSet; // 原始元素集合
int n; // 原始元素个数

struct NodeType //队列中的结点类型
{
int i; //当前结点在搜索空间中的层次
vector<int> x; //当前结点包含的解向量(排列结果)
vector<bool> used; //当前各元素是否已用于排列的情况
};

void EnQueue(NodeType e, queue<NodeType> &qu) //结点e是否进队qu及相应处理
{
if (e.i==n){ //若e为叶子结点,不进队,对应一种排列
for(int j = 0; j < n; j++){
cout<<e.x[j];
}
cout<<endl;
}
else
qu.push(e); // e为非叶子结点,进队该扩展子结点
}

void bfs(); //广度优先搜索排列树

int main()
{
cin >> n;
for(int i = 1; i <= n; i++){
nSet.push_back(i); // 原始集合进行排列,分别表示将{1,2,3...}进行排列
}

bfs(); // 广度优先搜索

return 0;
}


/* 请在这里填写答案 */


### 输入格式:

输入正整数n(1<=n<=6)

### 输出格式:

输出1,2,3,...,n的全部排列结果,每种排列结果占一行,数字间无空格。
对排列结果之间的顺序不做要求。

### 输入样例:

in
3


### 输出样例:

out
123
132
213
312
231
321










答案:若无答案欢迎评论