首页 > 编程 > C++ > 正文

C++基于栈实现铁轨问题

2020-01-26 15:07:28
字体:
来源:转载
供稿:网友

本文实例讲述了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++程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表