第518题
518. 排列生成
题目描述
输入n,1<=n<=8。输出n的全排列,每一行一个排列方案,数字由空格隔开,按照字典序输出。注意行末不能有空格。
代码
#include <bits/stdc++.h>
using namespace std;
int n,p[10];
void print(){
for(int i=1;i<n;i++) cout<<p[i]<<" ";
cout<<p[n]<<endl;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) p[i]=i;
do{
print();
}while(next_permutation(p+1,p+1+n));
return 0;
}
第519题
519. 起个英文名1
题目描述
王村长生了个大胖儿子需要起英文名字,关键要朗朗上口。他认为有n种音节是好听的,必须都用到一次,那么有哪些排序方式呢?
代码
#include <bits/stdc++.h>
using namespace std;
string names[1000];
int n;
void print(){
for(int i = 1;i<=n;i++)cout<<names[i];
cout<<" wang"<<endl;
}
int main(){
freopen("name1.in","r",stdin);
freopen("name1.out","w",stdout);
cin>>n;
for(int i = 1;i<=n;i++)cin>>names[i];
sort(names+1,names+1+n);
do{
print();
}while(next_permutation(names+1,names+1+n));
return 0;
}
第734题
734. 格子染色1
题目描述
有一排格子需要染色,每个格子只可以是RGB这3种颜色之一,要求相邻两格不能同色。目前有些格子已经有固定颜色不能改变了,剩下的格子可以选择染色。输入一串字符s代表格子情况,o代表空格RGB代表已有固定色。输出所有可能性,每行一种染色方法,按照字典序排列。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=25;
const int CLR=3;
char colors[CLR]={'B','G','R'};
int n,p[N];
void print(){//输出
for(int i=1;i<=n;i++) cout<<colors[p[i]];
cout<<endl;
}
void dfs(int x){//递归枚举决策
if(x==n+1) {print();return ;}
if(p[x]>=0) {dfs(x+1);return ;}
for(int i=0;i<CLR;i++){
if(x==1&&p[2]!=i||x==n&&p[n-1]!=i||x>1&&x<n&&p[x-1]!=i&&p[x+1]!=i){//x号格子能涂i号颜色的条件
p[x]=i;
dfs(x+1);
p[x]=-1;
}
}
}
int main(){
freopen("color.in","r",stdin);
freopen("color.out","w",stdout);
char ch;
while(cin>>ch){//Ctrl+Z结束
++n;
if(ch=='B') p[n]=0;
else if(ch=='G') p[n]=1;
else if(ch=='R') p[n]=2;
else p[n]=-1;
}
p[0]=p[n+1]=-1;
dfs(1);
return 0;
}
Peter Peter在哪里,我要赶快关注你。粉丝粉丝在哪里,我一定会去回关你!