我在算法中需要帮助:我有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
答案 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;
}