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