给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有 'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。
输入格式
输入有多组数据,每行一组,每组数据是一个由小写字母组成的字符串,已知字符串的长度在 1 到 6 之间。
输出格式
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字典序如下定义:
已知 S = s_1s_2...s_k , T = t_1t_2...t_kS=s1s2...sk,T=t1t2...tk,则 S < TS
样例输入
xyz
Copy
样例输出
xyz
xzy
yxz
yzx
zxy
zyx
Copy
解题思路:详细解题思路见代码解析。
#include
using namespace std;
char a[10];
int n,use[10];
string s;
void print()
{
for(int i=1;i<=n;i++)
{
cout<n) //当前位置大于n,结束
{
print(); //输出该种排列
return;
}
for(int i=0;i<=n-1;i++) //枚举第cur个元素的值
{
if(use[i]==0) //i没有被前面的元素使用
{
a[cur]=s[i]; //记录元素值
use[i]=1; //标记i被使用
dfs(cur+1); //搜索下一个元素的值
use[i]=0; //使用完,恢复状态
}
}
}
int main()
{
while(cin>>s)
{
n=s.size();
dfs(1); //从第一个位置开始排
cout<
Copy
要在国际象棋棋盘中放n个皇后(棋盘大小为n*n),使任意两个皇后都不能互相吃。(提示:皇后能吃同一行、同一列、同一对角线的任意棋子。)
输入格式:输入一行,包含一个正整数n(n <= 8)。
输出格式:如果存在符合条件的放置方法,输出所有解,每组解占一行,其中每个数字占 5 个字符宽度,右对齐;如果不存在符合条件的解,则输出“no solute!”(不包含引号)。
样例输入:
4
Copy
样例输出:
2 4 1 3
3 1 4 2
Copy
样例解释:
如下图所示,当n=4时,皇后放置的两种解法:
解法1:第一行的2列,第二行的4列,第三行的1列,第四行的3列。组成一起就是2 4 1 3
解法2:第一行的3列,第二行的1列,第三行的4列,第四行的1列。组成一起就是3 1 3 2
解题思路:详细解题思路见代码解析。
#include
using namespace std;
int a[10]; //记录第i行的皇后放在第几列
int n,ans=0;
bool check(int row,int col){ //判断第row行的皇后摆在第col列行不行
for(int i=1;in){ //从上往下摆,摆到第n+1行结束,即到达目的地
ans++; //摆法++
for(int i=1;i<=n;i++) //具体摆法
{
cout<>n;
dfs(1); //从第一行开始
if(ans==0)
cout<<"no solute!";
return 0;
}
Copy
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 × 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。
对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。
已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。
输入格式:第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1≤b≤92)。
输出格式:输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。
输入样例1:
2
1
92
Copy
输出样例1:
15863724
84136275
Copy
解题思路:详细解题思路见代码解析。
#includeusing namespace std;int res[100]; //存放每种摆法 int n,t=0,a[100];bool check(int x,int y) //检查是否可以摆 { for(int i=1;i8) //不要写成n了,这里是8皇后,如果超过8,记录 { t++; res[t]=make(); //res[1]存放第一种摆法,以此类推... return ; } for(int i=1;i<=8;i++) //8行 { if(check(cur,i)==true) //是否可以摆 { a[cur]=i; //记录元素值 dfs(cur+1); //搜索下一个元素的值 } }}int main(){ int q,m; dfs(1); cin>>q; //sort(res+1,res+1+92); //可以不用排序,本来已经排好序了 for(int i=1;i<=q;i++) { cin>>m; cout<
Copy
终于,小李在他 60 岁的时候下定决心,离开了城市,来到了农村生活,过起了田园生活.....(小李长成了老李了)
农村的生活非常闲适,小李还养了一头老黄牛,并且经常牵着这头老黄牛去牧场上吃草。这头牛有一个独特的能力——在牧场中能像中国象棋中的马一样跑跳。当然,这头牛不能跳到岩石或树上,不 过能跳到有牧草的地方。
这儿有一个宽为 X