整数分解为若干项之和

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
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

你可能感兴趣的:(竞赛)