pku2248 Addition Chains
传说中的迭代加深算法(ID),第一次认识,其威力真强。融合了普通dfs和普通bfs的优点,于是就可以做出最短加法链
此外还有IDA*算法,有待学习啊。。。
#include <stdio.h>
#define N 101
int n,deep,lim,num[N]= {1};
bool ok;
void dfs(int cur,int d)
{
if(d > deep) return;
if(num[ cur ] == n)
{
lim=cur;
ok=true;
return;
}
for(int i=cur; i>=0; i--)
{
if(num[ cur ] + num[ i ] <= n)
{
num[ cur+1 ]=num[ cur ]+num[ i ];
dfs(cur + 1, d+1);
if( ok ) return;
}
}
}
int main()
{
while(scanf("%d",&n),n)
{
ok=false;
for(deep=1; 1; deep++)
{
dfs(0,1);
if(ok) break;
}
printf("1");
for(int i=1; i<=lim ; i++)
printf(" %d",num[i]);
printf("\n");
}
return 0;
}
浙公网安备 33010602011771号