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

2025-05-29 0 105

本文实例讲述了C++基于实现铁轨问题。分享给大家供大家参考。具体分析如下:

示例图如下所示:

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

经典问题!第一次做的时候思路太混乱了,现在看了刘汝佳的书,重新整理下。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65
#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++程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C++基于栈实现铁轨问题 https://www.kuaiidc.com/107982.html

相关文章

发表评论
暂无评论