C++基于栈实现铁轨问题
2019/7/10 23:09:24
本文主要是介绍C++基于栈实现铁轨问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文实例讲述了C++基于栈实现铁轨问题。分享给大家供大家参考。具体分析如下:
示例图如下所示:
经典栈问题!第一次做的时候思路太混乱了,现在看了刘汝佳的书,重新整理下。
#include <stdio.h> #include <string.h> /****************************************************************** * 用数组A存储调整前的车厢号序列,用数组B存储调整好的车厢号序列 * 用栈stack存储存放在中转站C中的车厢 * 用ix_A指向A中最前面的车厢,用ix_B指向B中最前面的车厢 * * 如果ix_B已经指向了\0,则说明所有车厢已经按指定次序出站,否则 * 如果ix_B指向的车厢等于ix_A指向的车厢,则直接把ix_A开到B,否则 * 如果ix_B指向的车厢等于stack中的栈元素,则把栈顶车厢开出,否则 * 如果此时A中还有车厢,则把A开入中转站C中,否则 * 输出无解。 *******************************************************************/ char stack[1010]; char A[1010]; char B[1010]; int main(int argc, char *argv[]) { scanf("%s%s",A,B); int len_a = strlen(A); int len_b = strlen(B); /* 初始化栈 */ int top = -1; int tot = 0; int ix_a = 0; int ix_b = 0; while(1) { if(A[ix_a] == B[ix_b]) { printf("in\n"); printf("out\n"); ++ix_b; ++ix_a; if(ix_b == len_b) /* 车已经全出去了,操作成功 */ break; } else if(tot != 0 /* 先检查栈是否为空 */ && B[ix_b] == stack[top]) { printf("out\n"); --tot; --top; ++ix_b; if(ix_b == len_b) break; } else if(ix_a != len_a) { printf("in\n"); ++tot; ++top; stack[top] = A[ix_a]; ++ix_a; if(ix_b == len_b) break; } else { printf("无解!\n"); return 0; } } printf("完成!\n"); return 0; }
希望本文所述对大家的C++程序设计有所帮助。
这篇关于C++基于栈实现铁轨问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享