dfs处理:事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。
输入样例:
7
输出样例:
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=7
#include<stdio.h>
int count=0,geshu,zz[1000];
int n;
void search(int remain,int start,int fen){ //remain 剩下的,start很重要(必须理解),fen 就是写入数组个数
if (remain==0){
count++;
if(count %4 !=1)
printf(";");
printf("%d=%d",n,zz[0]);
for(int j=1;j<fen;j++){
printf("+%d",zz[j]);
}
if(count%4==0) printf("\n");
}
else{
for(int j=start;j<=remain;j++){ //问问自己为什么是start 不是i??????
zz[fen]=j;
search(remain-j,j,fen+1); //注意不要return!!!!!
}
}
}
int main(){
scanf("%d",&n);
int remain=n;
int fen=0;
search(remain,1,fen);
return 0;
}
结果:
7
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
7=2+5;7=3+4;7=7
里面strat的循环改成1呢??
结果:
7
7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+2+1;7=1+1+1+1+3
7=1+1+1+2+1+1;7=1+1+1+2+2;7=1+1+1+3+1;7=1+1+1+4
7=1+1+2+1+1+1;7=1+1+2+1+2;7=1+1+2+2+1;7=1+1+2+3
7=1+1+3+1+1;7=1+1+3+2;7=1+1+4+1;7=1+1+5
7=1+2+1+1+1+1;7=1+2+1+1+2;7=1+2+1+2+1;7=1+2+1+3
7=1+2+2+1+1;7=1+2+2+2;7=1+2+3+1;7=1+2+4
7=1+3+1+1+1;7=1+3+1+2;7=1+3+2+1;7=1+3+3
7=1+4+1+1;7=1+4+2;7=1+5+1;7=1+6
7=2+1+1+1+1+1;7=2+1+1+1+2;7=2+1+1+2+1;7=2+1+1+3
7=2+1+2+1+1;7=2+1+2+2;7=2+1+3+1;7=2+1+4
7=2+2+1+1+1;7=2+2+1+2;7=2+2+2+1;7=2+2+3
7=2+3+1+1;7=2+3+2;7=2+4+1;7=2+5
7=3+1+1+1+1;7=3+1+1+2;7=3+1+2+1;7=3+1+3
7=3+2+1+1;7=3+2+2;7=3+3+1;7=3+4
7=4+1+1+1;7=4+1+2;7=4+2+1;7=4+3
7=5+1+1;7=5+2;7=6+1;7=7