Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int matriz[1000];
- int n;int path[1000]={0};int verif[1000]={0};
- int verificar(int j){
- if (verif[j]!=0){
- return 0;
- }else{
- return 1;/*puedo tomarlo*/
- }
- }
- int backtrack(int suma,int caso,int numultimo){
- if (suma==n){
- int i=0;
- printf("{");
- while((path[i]!=0) && path[i]!=suma){
- printf("%d, ",path[i]);
- i++;
- }
- printf("}");
- if (path[i]!=suma) printf("\n");
- path[caso-1]=0;
- verif[numultimo]=0;
- return 0;
- }
- int i;int s;int r;
- for (i=numultimo;i<n;i++){
- if (verificar(i)){
- s=suma+matriz[i];
- if (s<=n) {
- path[caso]=i+1;
- verif[i]=1;
- r=backtrack(s,caso+1,i);
- }
- }
- }
- path[caso-1]=0;
- verif[numultimo]=0;
- return 0;
- }
- int main(int argc, char** argv) {
- scanf("%d",&n);
- int i;
- for(i=0;i<n;i++){
- matriz[i]=i+1;
- }
- int s;int j;
- j=backtrack(0,0,0);
- return (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement