2016-01-31 143 views
-5

我無法解決這個問題,嘗試了很多,但邏輯不起作用。 問題是, 我必須計算2 x N矩陣的所有可能的組合。 條件:如何獲得2xn矩陣的所有可能的組合

  • 所有元素的總和必須N.在一排
  • 元件或一列必須是在非增加的方式。
  • 所有元素必須是正數和實數。 列印所有可能的組合。 讓6,是29 謝謝。
+0

請分享你嘗試過什麼到目前爲止 –

回答

-4

這個問題已經被問,
可以使用回溯來解決它 這裏的代碼,

#include<conio.h> 
#include<stdio.h> 
int a[2][100],c,sum,num; 
int ch; 
int check(int x,int y) 
{ 
    int i=1; 
    if(x==1&&a[x][y]>a[0][y]) 
    i=0; 
    if(y>0&&a[x][y]>a[x][y-1]) 
    i=0; 
    return i; 
} 
void print() 
{ 
    int i,j; 
    printf("\n"); 
    for(i=0;i<2;i++) 
    { 
     for(j=0;j<num;j++) 
     printf("%4d",a[i][j]); 
     printf("\n"); 
    } 
} 
void fun(int lim,int x,int y) 
{ 
    int i; 
    if(y<num) 
    for(i=lim;i>0;i--) 
    { 
     a[x][y]=i; 
     if(check(x,y)) 
     { 
      sum+=a[x][y]; 
      if(sum==num) 
      { 
       print(); 
       sum-=a[x][y]; 
       a[x][y]=0; 
       c++; 
      } 
      else 
      { 
       fun(num-sum,(x+1)%2,y+(x+1)/2); 
       a[(x+1)%2][y+(x+1)/2]=0; 
       fun(num-sum,(x+2)%2,y+(x+2)/2); 
       a[(x+2)%2][y+(x+2)/2]=0; 
      } 
      sum-=a[x][y]; 
     } 
    } 
} 

int main() 
{ 
    scanf("%d",&num);//num=6 
    fun(num,0,0); 
    printf("%d",c); 
    return 0; 
} 
相關問題