题意:给你一个字谜,让你改最少的数,使等式有唯一解。

分析:两次dfs,一次枚举改动,一次枚举所有解,判断是否有且仅有一个解。

#include<cstdio>
#include<cctype>
#include<string>
#include<string.h>
#include<queue>
#include<math.h>
#include<iostream>
#include<map>
using namespace std;
string s[3];
int len[3];
int maxd;
char change[11] = { '*','0','1','2','3','4','5','6','7','8','9' };
int stoint() {char cs[10];char ss[10];int t0 = 0, t1 = 0, t2;for (int i = 0; i < len[0]; i++)t0 = t0 * 10 + s[0][i] - '0';for (int i = 0; i < len[1]; i++)t1 = t1 * 10 + s[1][i] - '0';t2 = t0 * t1;for (int i = 0; i < len[2]; i++) {cs[len[2] - i - 1] = t2 % 10 + '0';t2 /=10;}if (t2 != 0 || cs[0] == '0')return 0;//判断是否存在,满足位数for (int i = 0; i < len[2]; i++) {if (s[2][i] != '*'&&cs[i] != s[2][i])return 0;}return 1;
}
int judge(int a, int b) {int ans = 0;if (a == 2) { ans = stoint(); return ans; }int aa, bb;char temp = s[a][b];if (b == len[a] - 1) {aa = a + 1;bb = 0;;}else {aa = a;bb = b + 1;}if (s[a][b] == '*') {for (int i = 1; i < 11; i++) {if (b == 0 && i == 1)continue;s[a][b] = change[i];ans += judge(aa, bb);if (ans > 1)break;}}else {ans += judge(aa, bb);}s[a][b] = temp;return ans;
}
int  dfs(int layer,int indexs,int d) {
//  if (change > maxd)return false;int ans;if (d == maxd) {ans = judge(0, 0);if (ans==1) return 1;else return 0;}if (layer >= 3)return 0;int a, b;char temp = s[layer][indexs];if (indexs == len[layer] - 1) {//更新坐标a = layer + 1;b = 0;}else {a = layer;b = indexs + 1;}bool ok = false;for (int i = 0; i < 11; i++) {if (b == 0 && i == 1)continue;//前导0;if (temp == change[i]) {//相同的排除s[layer][indexs] = temp;ans=dfs(a, b, d);}else {s[layer][indexs] = change[i];ans = dfs(a, b, d + 1);}if (ans)break;}if (!ans)s[layer][indexs] = temp;//没找到,还原return ans;
}int main() {int kase = 0;while (cin >> s[0] && s[0][0] != '0') {cin >> s[1] >> s[2];for (int i = 0; i < 3; i++)len[i] = s[i].length();for (maxd = 0; ; maxd++) {if (dfs(0,0, 0))break;}cout << "Case " << ++kase<<": ";cout << s[0] << " " << s[1] << " " << s[2] << endl;}//system("pause");return 0;}

UVA12107Digit Puzzle数字字谜(迭代加深搜索)相关推荐

  1. 紫书搜索 习题7-8 UVA - 12107 Digit Puzzle IDA*迭代加深搜索

    题目链接: https://vjudge.net/problem/UVA-12107 题意: 给出一个数字谜,要求修改尽量少的数,使修改后的数字谜只有唯一解.空格和数字可以随意替换,但不能增删,数字谜 ...

  2. 搜索进阶之迭代加深搜索

    迭代加深搜索 首先这个不要怕这个东西,其实我刚开始学这个搜索也觉得特别高大上,觉得都是很高大上让人听不懂的专业术语,其实说白了迭代加深搜索的思想和精髓就是控制了搜索深度的dfs,但是却能够达到广搜的效 ...

  3. hdu1667-IDA*-迭代加深搜索 A*算法

    迭代加深搜索 迭代加深搜索,实质上是限定下界的深度优先搜索.即首先允许深度优先搜索K层,若没有发现可行解,再将K+1后重复以上步骤搜索(即深度优先搜索k+1层),直到搜索到可行解. 在迭代加深搜索的算 ...

  4. hdu 1560 DNA sequence(迭代加深搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 题意:从n个串中找出一个最短的公共串,,该公共串对于n个字符串不要求连续,即只要保持相对顺序就好 ...

  5. UVA - 11214Guarding the Chessboard守卫棋盘(迭代加深搜索)

    题意:输入一个n*m棋盘(0<n,m<10),某些格子有标记.用最少的皇后守卫所有带标记的格子.皇后规则是所在坐标的直线和斜线都可以被守卫,长度不限. 分析:因为不知道深度,所以用迭代加深 ...

  6. 迭代加深搜索与埃及分数求解

    迭代加深搜索,实质上是限定下界的深度优先搜索.即首先允许深度优先搜索K层,若没有发现可行解,再将K+1后 重复以上步骤搜索,直到搜索到可行解. 在迭代加深搜索的算法中,连续的深度优先搜索被引入,每一个 ...

  7. P2324 [SCOI2005]骑士精神(迭代加深搜索,dfs)

    传送门 文章目录 解析 解析 很显然,让马走的话状态记录和转移都会比较复杂 所以转化成让空位跳会更好做一点 但这不是重点 初看本题,其实第一感觉是bfs 但是状态数理论上最差可以达到815,(当然基本 ...

  8. 迭代加深搜索 C++解题报告 :[SCOI2005]骑士精神

    题目 此题根据题目可知是迭代加深搜索. 首先应该枚举空格的位置,让空格像一个马一样移动. 但迭代加深搜索之后时间复杂度还是非常的高,根本过不了题. 感觉也想不出什么减枝,于是便要用到了乐观估计函数(O ...

  9. 启发式搜索 迭代加深搜索 搜索对象的压缩存储

    常见的几种搜索算法 常见的几种搜索算法_唐宋缘明卿_cris的博客-CSDN博客_搜索算法有哪些 搜索 -- 启发式搜索 搜索 -- 启发式搜索_Alex_McAvoy的博客-CSDN博客_启发式搜索 ...

最新文章

  1. 移动端自动化==Appium定位方式总结
  2. 为了熟悉再一次的配置Postfix
  3. gin使用 GET, POST, PUT, PATCH, DELETE, OPTIONS
  4. 多索引表 (1)boost::multi_index多索引容器
  5. 为何优秀的Java程序员如此难招?
  6. 计算机基础说课 word,计算机基础说课稿
  7. 哪些代码设计看似是面向对象,实际是面向过程的?
  8. linux两个卷组可以合并,Linux系统中所有的逻辑卷必须属于同一个卷组()。
  9. 俄罗斯方块c语言代码 vc 6.0,VC++6.0俄罗斯方块代码
  10. (转)如何使用Xcode的Targets来管理开发和生产版本的构建
  11. Linux网络编程 - 在服务器端运用进程间通信之管道(pipe)
  12. 异常:Fatal error loading the DB: Invalid argument. Exiting
  13. 戴尔蓝牙以及其他驱动
  14. Windows Mobile 7.0最新消息!!
  15. 操作系统春招面试复习之:操作系统概述
  16. (附源码)计算机毕业设计SSM游泳馆管理平台
  17. 深度学习——神经网络的种类(前馈神经网络,反馈神经网络,图网络)
  18. 缓存和数据库如何保证一致性
  19. 十六、Barrier类(*)
  20. 什么是SRRC?流程是什么?申请需要哪些资料?

热门文章

  1. 大规模服务化对于服务治理的要求
  2. QuorumPeerConfig.parse
  3. checkInterruptWhileWaiting
  4. 多线程对于共享变量访问带来的安全性问题
  5. 设计模式之_Iterator_02
  6. Android从url不产生cookie,如何从android.webkit.CookieManager获取所有cookie或cookie的URL
  7. php将数组中元素打乱顺序,PHP公开课|学会随机打乱数组元素顺序的函数,你的PHP会学的更好...
  8. Spring @Import源码解析
  9. Spring注解编程基石(三)
  10. 我什么计算机作文600字,我家的电脑作文600字