摘要: 使用单位分数的和表示有理数。 例如 2/3 = 1/2 + 1/6; 加数不能有重复。0<a<b<1000。(有一个条件这里还没实现: 如果加数个数相同, 则最小分数越大越好。)此题目解答树宽度和深度都没有上限,不能直接用bfs或者dfs。解决方案是采用迭代加深搜索:从小到大枚举深度上限。int a, b;int tree[1000];bool dfs(int deep, int cb, int sa, int sb ) { tree[deep] = cb; int _a = sb + cb * sa; int _b = cb * sb; // 同一层向右平移, 找一个... 阅读全文
posted @ 2012-12-09 22:27 tsubasa_wp 阅读(1040) 评论(0) 推荐(0) 编辑
摘要: 输入两个整数n1, n2. 用 最少的四则运算从n1得到n2. 例如: 输入2,5, 则 2 / 2 = 1, 1 + 2 = 3, 3 + 2 = 5. 运算结果为 DIV, ADD, ADD.(好吧我偷懒把题目简化了。。)因为运算步骤可能无限长,本题的解答树是无限大的, 此题不能用回溯来解。本题要求最短过程,利用宽度优先遍历解答树。int n1, n2;char operators[4][4] = {"ADD","SUB","DIV","MUL"};int sequence[100];void bfs() { 阅读全文
posted @ 2012-12-09 20:12 tsubasa_wp 阅读(330) 评论(0) 推荐(0) 编辑