N个元素的所有组合

时间:2016-09-20 00:52:26

标签: c logic

我在算法中需要帮助:我有N个AP(接入点),每个AP共享一个频道和一个频率

频道从1到X 频率从1到Y

我需要找到值的所有可能性,所以我认为这样的逻辑,先做所有频率组合,然后是所有通道组合,然后我整理相同的。 但是我很难实现这个组合生成器,有人可以帮助我理解我的代码中出了什么问题吗?

#include <stdio.h>
#include <math.h>

main ()
{
    int j=0,key=1,cont=1,K,K2,i,AP,F;
    scanf("%d",&AP);              //Number of acess points
    scanf("%d",&F);               //Number of Frequencies
    K=pow(F,AP);                  //F^AP = Number of possibilities
    K2=K;                         //The same
    int FREQ[AP][K];              //For save the result 
    for(j=0;j<AP;j++)             //Repeat APs times
    {
        for(i=0;i<K2;i++)         //Repeat Result times
        {
            if(cont>F) cont=1;    
            FREQ[j][i] = cont;
            key++;
            if(key==K)
            {
                cont++;
                key=1;
            }
        }
        cont=key=1;
        K=K/2;
    }
}
例如,我有3个AP和2个频率

这用于获取可能性的数量和数字的频率以设置可能性 例如,如果我有3个AP和2个频率,它将首次运行 1 1 1 1 2 2 2 2 在第二个,因为我分裂了F / 2 这将是 1 1 2 2 2 1 1 2

但我不明白为什么不工作

,输出应为:

1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
2 2 2

1 个答案:

答案 0 :(得分:0)

我修好了:D

j=0;
key = cont = 1;
K=pow(F,AP);                        
K2=K;                               
K=K/F;                              
FREQ=calloc(K2,sizeof(int*));       
for(i=0;i<K2;i++)
    FREQ[i]=calloc(AP,sizeof(int));

for(j=0;j<AP;j++)                   
{
    for(i=0;i<K2;i++,key++)
    {
        FREQ[i][j] = cont;
        if(key==K)
        {
            if(cont==F) cont=1;
            else cont++;
            key=0;
        }
    }
    cont=1;
    K=K/F;
    key=1;
}