1
/*
2
最短路径的一个举例:
3![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
问题描述:在字梯游戏中,每一个词语都是通过将字梯的前一个词改变一个字母形成的。
5
例如,我们可以通过一系列的单字母替换将zero转换成five:zero, hero, here, hire, fire, five。
6![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
这个是一个无权最短路径问题,每个词语是个顶点,如果两个顶点可以通过一个字母的替换相互转换的话,
8
这两个顶点就有一个双向的边。
9![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
首先,我们要从一个字典中生成这么一个图:使用STL中的map,其中键是单词(string),
11
值是一个通过此单词一次变换能够得到的单词的集合vector<string>。
12
问题的关键在于:如何从一个包含89000个单词的词组来构造map。
13
可以用蛮力法,但是时间太慢,所有单词之间都要比较。一个优化是:避免比较长度不同的单词。
14
这个可以通过将单词按照长度先分组来做到。
15![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
一个方法是:对每个相同长度的数组用蛮力法。
17
另一个方法是:附加一个map,其中的键是一个反映单词长度的int,值是所有的具有这个长度的单词集合。
18
思想还是同上。
19
第三个方法是:使用附加map。将单词按照长度分组,对每个组分别操作。例如对长度为4的小组。
20
对每个长度为4的单词删除第一个字母,保留剩下的三个字母的样本,生成一个map,其中的键是这个样本,
21
值是所有的有这个样本单词的vector。例如单词"wine",去掉'w'生成样本"ine",则样本"ine"对应的
22
vector是"dine", "fine", "wine", "nine"![](https://www.cnblogs.com/Images/dot.gif)
.,样本"oot"对应:boot, foot, hoot, loot
..最后的这个map的值(vector)就是
23
一组单词,其中每个单词都能够通过一个字符的替换生成其他的单词。
24
*/
25![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
#include <iostream>
27
#include <sstream>
28
#include <algorithm>
29
#include <string>
30
#include <map>
31
#include <set>
32
#include <list>
33
#include <stack>
34
#include <queue>
35
#include <cctype>
36
#include <vector>
37
#include <bitset>
38
#include <cmath>
39
//#include <hash_map>
40![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
#define FORR(i, a, b) for(int i = a; i < b; ++i)
42
#define BE(x) x.begin(),x.end()
43
#define MP(a, b) make_pair(a, b)
44![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
using namespace std;
46
//using namespace stdex;
47![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
typedef vector<string> VS;
49
typedef vector<int> VI;
50![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
//words是所有的单词
52
map<string, VS> computerAdjacentWords(const VS& words)
53
{
54
map<string, VS> adjWords;
55
map<int, VS> wordsByLength;
56![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
//按长度分组
58
for (int i = 0; i < words.size(); i++)
59
{
60
wordsByLength[words[i].length()].push_back(words[i]);
61
}
62
map<int, VS>::const_iterator itr;
63
//对每个分组操作
64
for (itr = wordsByLength.begin(); itr != wordsByLength.end(); ++itr)
65
{
66
const VS& groupsWords = itr->second;
67
int groupNum = itr->first;
68![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69
//操作每个组中的每个位置
70
for (int i = 0; i < groupNum; i++)
71
{
72
//形如:"ine" -> "fine", "wine", "nine"
.
73
map<string, VS> repToWord;
74![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
for (int j = 0; j < groupsWords.size(); j++)
76
{
77
string rep = groupsWords[j];
78
rep.erase(i, 1);
79
//map的无重复性就是好,而且如果没有对应的可以直接新建一个
80
//wine加到ine中,fine也加到ine中
81
//wine也加到wne中
82
repToWord[rep].push_back(groupsWords[j]);
83
}
84![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
// 然后查找map中的值不止一个单词的(就是有像wine,fine这种)
86
map<string, VS>::const_iterator itr2;
87
for (itr2 = repToWord.begin(); itr2 != repToWord.end(); ++itr2)
88
{
89
const VS& clique = itr2->second;
90
if (clique.size() >= 2)
91
{
92
for (int p = 0; p < clique.size(); p++)
93
{
94
for (int q = p + 1; q < clique.size(); q++)
95
{
96
adjWords[clique[p]].push_back(clique[q]);
97
adjWords[clique[q]].push_back(clique[p]);
98
}
99
}
100
}
101
}
102
}
103
}
104
return adjWords;
105
}
106![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107
/*
108
下面就要使用单元无权最短路径算法了:
109
上面生成的map就相当是一个邻接链表的图表示:
110
一个节点和所有与它相连的节点集合。
111
由于,单源无权最短路径算法只能给出每个节点在路径中的前驱节点,所以,
112
这里返回的map<string,string>值就是最短路径中每个节点的相应前驱节点,而map中所有的键就是
113
最短路径中的所有节点。例如:将zero转换成five:zero, hero, here, hire, fire, five,则,
114
findChain返回的map<string,string>previousWord就是previousWord[five] = fire, previousWord[here] = hero。
115
注意:这里是找到从zero出发到所有节点的路径(中节点的前驱集合,所以没有second参数)
116
*/
117
map<string, string> findChain(const map<string, VS> & adjacentWords, const string& first)
118
{
119
map<string, string> previousWord;
120
queue<string> q;
121![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
122
q.push(first);
123
while (!q.empty())
124
{
125
string current = q.front();
126
q.pop();
127![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
128
map<string, VS>::const_iterator itr;
129
itr = adjacentWords.find(current);
130![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
const VS& adj = itr->second;
132
for (int i =0; i < adj.size(); i++)
133
{
134
if (previousWord[adj[i]] == "")
135
{
136
previousWord[adj[i]] = current;
137
q.push(adj[i]);
138
}
139
}
140
}
141
previousWord[first] = "";
142![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
return previousWord;
144
}
145![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
146
VS getChainFromPrevMap(const map<string, string>& previous, const string& second)
147
{
148
VS result;
149
//类型转换,因为操作符[]不能用在不可变的map中
150
map<string, string>& prev = const_cast<map<string, string> &> (previous);
151![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
152
for (string current = second; current != ""; current = prev[current])
153
result.push_back(current);
154![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
reverse(result.begin(), result.end());
156![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
return result;
158
}
159![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
160
int main()
161
{
162
string a[] = {"five", "hero", "boyfriend", "james", "zero", "good", "hire", "thank", "fire",
163
"here", "pen", "ccbb", "greatman", "come", "great", "greet", "gold", "glad"};
164
VS input(a, a+18);
165
string first("zero"), second("five");
166![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
167
//先构造一个图
168
map<string, VS> adjWords = computerAdjacentWords(input);
169![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
170
//再构造某个节点到所有节点最短路径中先驱集合
171
map<string, string> previousWords = findChain(adjWords, first);
172![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
173
//在找出到某个终点的最短路径
174
VS result = getChainFromPrevMap(previousWords, second);
175![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
176
FORR(i, 0, result.size())
177
{
178
cout << result[i] << " ";
179
}
180
cout << endl;
181![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
182
return 0;
183
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
118
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
119
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
120
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
121
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
122
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
124
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
125
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
126
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
128
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
129
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
130
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
132
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
134
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
135
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
136
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
138
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
139
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
140
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
141
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
142
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
144
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
145
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
146
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
147
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
148
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
149
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
150
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
151
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
152
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
153
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
154
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
156
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
158
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
159
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
160
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
161
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
162
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
163
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
164
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
165
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
166
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
167
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
168
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
169
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
170
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
171
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
172
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
173
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
174
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
175
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
176
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
177
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
178
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
179
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
180
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
181
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
182
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
183
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)