POJ 3134 Power Calculus(IDA*)
第一次写IDA*,IDA*可以看做迭代加深搜索IDDFS+A*搜索,说白了就是迭代DFS+剪枝
问1只经过加减,多少步可以变换到n
因为不知道最深可以迭代多少次,很适合迭代加深搜索,depth不断增加,然后从0到depth进行dfs
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <vector> #include <queue> #include <string> using namespace std; int a[1005],cnt,n; bool dfs(int now,int deep) { if(now>deep) return false; if(a[cnt]<<(deep-now)<n) return false; if(a[cnt]==n) return true; cnt++; for(int i=0;i<cnt;i++) { a[cnt]=a[i]+a[cnt-1]; if(dfs(now+1,deep)) return true; a[cnt]=abs(a[cnt-1]-a[i]); if(dfs(now+1,deep)) return true; } cnt--; return false; } int main() { while(cin>>n) { if(n==0) break; int i; for(i=0;;i++) { cnt=0; a[0]=1; if(dfs(0,i)) break; } cout<<i<<endl; } }