hdu 5487 Difference of Languages(bfs)
2015-10-02 21:17
435 查看
题目链接:hdu 5487 Difference of Languages
解题思路
bfs,从状态(0,0)开始,枚举下一个字符,将失配的一边跳转至N,而对应的N节点不管什么字符都是失配。这样状态最多有1001 * 1001。代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1005; const int maxm = 26; struct DFA { int n, g[maxn][maxm]; bool ac[maxn]; void init () { int m, k, u, v; char c[5]; scanf("%d%d%d", &n, &m, &k); memset(ac, false, sizeof(ac)); for (int i = 0; i <= n; i++) for (int j = 0; j < maxm; j++) g[i][j] = n; while (k--) { scanf("%d", &u); ac[u] = true; } while (m--) { scanf("%d%d%s", &u, &v, c); g[u][c[0]-'a'] = v; } } }A, B; struct State { int u, v, p, w; State (int u = 0, int v = 0, int p = 0, int w = 0): u(u), v(v), p(p), w(w) {} }Q[maxn * maxn]; bool vis[maxn][maxn]; void put (int x) { if (x > 0) { put(Q[x].p); printf("%c", Q[x].w + 'a'); } } bool solve () { if (A.ac[0]^B.ac[0]) return true; memset(vis, false, sizeof(vis)); int head = 0, rear = 0; Q[rear++] = State(0, 0, -1, 0); vis[0][0] = true; while (head < rear) { State& cur = Q[head++]; for (int i = 0; i < maxm; i++) { int u = A.g[cur.u][i]; int v = B.g[cur.v][i]; if (vis[u][v]) continue; vis[u][v] = true; Q[rear++] = State(u, v, head-1, i); if (A.ac[u]^B.ac[v]) { put(rear-1); return true; } } } return false; } int main () { int cas; scanf("%d", &cas); for (int kcas = 1; kcas <= cas; kcas++) { A.init(); B.init(); printf("Case #%d: ", kcas); if (!solve()) printf("0\n"); else printf("\n"); } return 0; }
相关文章推荐
- JAVA实现合并两个排序的链表(《剑指offer》)
- LeetCode题解:Populating Next Right Pointers in Each Node
- html页面显示div源代码:用<xmp></xmp>标签
- bootstrap 表单控件 控件状态 控件大小 help-block
- HTML学习记录<三> :创建电子邮件链接
- HTML学习记录<二>:标签的 target 属性中的_blank _self _parent _top
- JAVA实现链表的反转(《剑指offer》)
- 一、HTML和CSS基础--HTML+CSS基础课程--第2部分
- 让HTML页面元素居中的各种实现方法
- 前端学习首页
- Atitit.列表页and查询条件的最佳实践(1)------设定搜索条件and提交查询and返回json数据
- jQuery 事件的命名空间
- 常规功能和模块自定义系统 (cfcmms)—011选择菜单后的执行过程
- bootstrap 基础表单 内联表单 横向表单
- 浅谈javascript的五种基本数据类型
- 用jquery实现全选功能
- 用jquery实现全选/全部选功能(jquery-1.9.x 版本以上),使用 prop 属性
- 二叉树的镜像
- JAVA的StringBuffer类
- css-vertical-centering