嗯....出大问题这个...正在修改ing
//用深搜解决字母全排列问题;
#include<stdio.h>
#include<string.h>
char a[5];
char b[5];
bool alp[5];
int p;
void dfs(int step)
{
int *n=&p;
if(step=*n+1){
for(int i=1;i<=*n;i++) printf("%d",a[i]);
printf("\n");
return;
}
for(int i=1;i<=*n;i++){
if(alp[i]==false){
a[i]=b[i];
dfs(i+1);
alp[i]=true;
}
alp[i]=false;
}
return;
}
int main()
{
scanf("%s",b);
p=strlen(b);
dfs(1);
return 0;
}
里面问题一推...没眼看简直.....由于临时起意把数字改成字母,很多问题反正...而且明明一个全局变量搞定,还折腾指针。绝对不是因为我刚学,单纯语法没学好。感想全世界最棒最负责最帅的养辅呜呜呜呜呜呜呜。
//用深搜解决字母全排列问题;
#include<stdio.h>
#include<string.h>
char a[200];
char b[200];
bool flag[200];
int p;
void dfs(int step)
{
int *n=&p;//这里可以完全不用指针,直接p拉过去就行....
if(step==*n+1){
for(int i=1;i<=*n;i++) printf("%c",a[i]);
printf("\n");
return;
}
for(int i=1;i<=*n;i++){
if(flag[i]==false){
a[step]=b[i-1];
flag[i]=true;
dfs(step+1);
flag[i]=false;
}
}
return;
}
int main()
{
scanf("%s",b);
p=strlen(b);
dfs(1);
return 0;
}
刚刚用dfs做了1378,注意限制条件和每次总数的变化。以及,搜索没有那么难,要对自己有信心!加油!!不止算法,整个学习也是!!!
#include<stdio.h>
int min(int q,int p){
if(q>p) return p;
else return q;
}
//本来以为直接找个规律就过了....还是我太年轻了.......
/*
2
8 3
13 4
*/
int cnt,x,y;
void dfs(int n,int m,int limit){
if(m==1){
if(n>0&&n<limit){
cnt++;
return;
}
else return;
}
for(int i=m;i<min(n-(m*(m-1)/2)+1,limit);i++){
dfs(n-i,m-1,i);
}
return ;
}
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
cnt=0;
scanf("%d %d",&x,&y);
dfs(x,y,200);
printf("%d\n",cnt);
}
return 0;
}