UVa 732
来源:互联网 发布:2017年快餐行业数据 编辑:程序博客网 时间:2024/06/08 05:10
题目:已知两个单词,利用一个栈,将第一个单词变成第二个单词,求出所有可能的操作序列。
分析:模拟,搜索,数据结构。利用dfs搜索求解。
利用四个串以及对应的下标记录搜索状态:当前输入,当前栈,当前输出,目标输出;
搜索时只有两种可能:input到stack,stack到output,为了回溯生成对应的逆操作;
说明:注意数据中有空行。
#include <stdio.h>#include <stdlib.h>#include <string.h>char input[101];char target[101];char stack[101];char output[101];int p_i, p_s, p_o;int move[202];void dfs(int index, int n) {if (p_o == n-1) {printf("%c",move[0]);for (int i = 1; i < index; ++ i) {printf(" %c",move[i]);}printf("\n");}else {if (p_i < n) {move[index] = 'i';stack[++ p_s] = input[p_i ++]; dfs(index+1, n);input[-- p_i] = stack[p_s --];}if (p_s >= 0 && p_o < n-1 && target[p_o+1] == stack[p_s]) {move[index] = 'o';output[++ p_o] = stack[p_s --];dfs(index+1, n);stack[++ p_s] = output[p_o --];}}}int main(){while (gets(input)) {gets(target);puts("[");p_i = 0, p_s = -1, p_o = -1;if (strlen(input) == strlen(target)) {dfs(0, strlen(input));}puts("]");}return 0;}
阅读全文
0 0
- UVa 732
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- ajax同步与异步的区别
- eclipse
- 对XML进行解释
- sql server 带有OUTPUT的INSERT,DELETE,UPDATE
- Matlib 关于视屏处理的方法
- UVa 732
- 1045. Favorite Color Stripe (30)
- Django数据库操作
- 最大值和最小值
- STM32的时钟系统RCC详细整理
- 例题6-17 看图写树(Undraw the Trees, UVa 10562)
- 201612-2CSP工资计算
- 51nod 1095 Anigram单词
- 文件IO和标准IO的比较