Problem
某企业面试编程题:蚂蚁爬杆
有一根300厘米的细木杆,在第30厘米、80厘米、110厘米、160厘米、250厘米这五个位置上各有一只蚂蚁。
木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝相反方向走。假设蚂蚁们每秒钟可以走5厘米的距离。
请编写一个程序,计算各种可能情形下所有蚂蚁都离开木杆的最小时间和最大时间。
我这个题目做了两次,一次是用JS实现滴,一次是用C#实现的
js的实现类分析不明确,没能挖掘出隐藏的类,所以感觉很乱,后面的C#版本有很大的改进,
但是后面涉及图形的演示的时候,又发现自己设计有遗漏:
现在 把代码发上来以后可以看看 还有可以修改的地方吧!
js:
1 function walk()
2 {//debugger;
3 this._pos += this._dir*this._speed;
4 }
5 function whenMeet()
6 {
7 this._dir = -1*this._dir;
8 }
9 function subMakeAnts(pos)
10 {
11 var _res = new Array();
12 var _ant_1 = new ants();
13 _ant_1._pos = pos;
14 _ant_1._dir = 1;
15 _res.push(_ant_1);
16 var _ant_2 = new ants();
17 _ant_2._pos = pos;
18 _ant_2._dir = -1;
19 _res.push(_ant_2);
20
21 return _res;
22 }
23 function makeAntGroup(tempAnts,indexs)
24 {
25 var _res = new Array();
26 _res.push(tempAnts[0][indexs[0]]);
27 _res.push(tempAnts[1][indexs[1]]);
28 _res.push(tempAnts[2][indexs[2]]);
29 _res.push(tempAnts[3][indexs[3]]);
30 _res.push(tempAnts[4][indexs[4]]);
31 return _res;
32 }
33 function makeTempAnts()
34 {
35 var _pos = new Array();
36 _pos.push(60);
37 _pos.push(160);
38 _pos.push(220);
39 _pos.push(320);
40 _pos.push(500);
41 var _tempAnts = new Array();
42 for(var i=0; i<_pos.length; i++)
43 {
44 _tempAnts.push(subMakeAnts(_pos[i]));
45 }
46 return _tempAnts;
47 }
48 function makeAnts()
49 {
50 var _tempAnts = makeTempAnts();
51 var _res = new Array();
52 for(var a=0; a<2; a++ )
53 {
54 for(var b=0; b<2; b++ )
55 {
56 for(var c=0; c<2; c++ )
57 {
58 for(var d=0; d<2; d++ )
59 {
60 for(var e=0; e<2; e++ )
61 {
62 var _indexs = new Array();
63 _indexs.push(a);
64 _indexs.push(b);
65 _indexs.push(c);
66 _indexs.push(d);
67 _indexs.push(e);
68 _res.push(makeAntGroup(_tempAnts,_indexs));
69 }
70 }
71 }
72 }
73 }
74 //alert(_res.length);//must32
75 return _res;
76 }
77
78 function isLeave()
79 {
80 if(this._pos<=0 || this._pos>=600)
81 {
82 return true;
83 }
84 return false;
85 }
86
87 function ants()
88 {
89 this._pos = 0;
90 this._dir = 1;
91 this._speed = 1;
92 this.walk = walk;
93 this.whenMeet = whenMeet;
94 this.makeAnts = makeAnts;
95 this.isLeave = isLeave;
96 }
97 /*-----------stick-------------*/
98 function makeSticks(ants)
99 {
100 var _res = new Array();
101 var _stick;
102 for(var i=0; i<ants.length; i++)
103 {
104 _stick = new sticks();
105 _stick._ants = ants[i];
106 _res.push(_stick);
107 }
108 return _res;
109 }
110
111 function judgeMeet()
112 {
113 for(var i=0; i<this._ants.length; i++)
114 {
115 for(var j=i+1;j<this._ants.length; j++)
116 {
117 if(this._ants[i]._pos == this._ants[j]._pos&&
118 !this._ants[i].isLeave()&&
119 !this._ants[j].isLeave()&&
120 j!=i)
121 {
122 this._ants[i].whenMeet();
123 this._ants[j].whenMeet();
124 }
125 }
126 }
127 }
128
129 function judgeAllLeave()
130 {
131 for(var i=0; i<this._ants.length; i++)
132 {
133 if(!this._ants[i].isLeave())
134 return false;
135 }
136 return true;
137 }
138
139 function moveAnts()
140 {
141 this._time +=1;
142 this.judgeMeet();
143 for(var i=0; i<this._ants.length; i++)
144 {
145 if(!this._ants[i].isLeave())
146 {
147 this._ants[i].walk();
148 }
149 }
150 }
151 function resetAnts()
152 {
153 /*
154 _pos.push(60);
155 _pos.push(160);
156 _pos.push(220);
157 _pos.push(320);
158 _pos.push(500);
159 this._ants[0]._pos
160 this._ants[1]
161 this._ants[2]
162 this._ants[3]
163 this._ants[4]
164 */
165 }
166 function sticks()
167 {
168 this._width = 600;
169 this._ants = new Array();
170 this._time = 0;
171
172 this.makeSticks = makeSticks;
173 this.judgeMeet = judgeMeet;
174 this.judgeAllLeave = judgeAllLeave;
175 this.moveAnts = moveAnts;
176 this.resetAnts = resetAnts;
177 }
178 /*----------manager------------*/
179 function initAnts()
180 {
181 var _ant = new ants();
182 this._ants = _ant.makeAnts();
183 }
184 function initSticks()
185 {
186 var _stick = new sticks();
187 this._sticks = _stick.makeSticks(this._ants);
188 }
189 var cal_p = 0;
190 var stick_p = null;
191 var antDivs_p = null;
192 function moveAntDivs()
193 {
194 for(var i=0; i<antDivs_p.length; i++)
195 {
196 antDivs_p[i].style.left = 88+stick_p._ants[i]._pos;
197 }
198 }
199 function doTest(stick)
200 {
201 var _antDivs = new Array();
202 var _antDiv;
203 //alert(stick._ants.length);//must5
204 for(var i=0; i<stick._ants.length; i++)
205 {
206 _antDiv = document.createElement("DIV");
207 _antDiv.style.position = "absolute";
208 _antDiv.style.width = 20;
209 _antDiv.style.height = 20;
210 _antDiv.innerText = i;
211 _antDiv.style.left = 110+stick._ants[i]._pos;
212 _antDiv.style.top = 225;
213 document.body.appendChild(_antDiv);
214 _antDivs.push(_antDiv);
215 }
216 stick_p = stick;
217 antDivs_p = _antDivs;
218 moveAction();
219 }
220 function moveAction()
221 {
222 moveDiv();
223 stick_p.moveAnts();
224 cal_p = 0;
225 if(stick_p.judgeAllLeave())
226 {
227 alert(stick_p._time/10+"S");
228 _manager._results.push(stick_p._time/10);
229 while(antDivs_p.length>0)
230 {
231 var _div = antDivs_p.pop();
232 document.body.removeChild(_div);
233 }
234 window.location.reload();
235 }
236 else
237 setTimeout("moveAction();",1);
238 }
239 function moveDiv()
240 {
241 for(var i=0; i<stick_p._ants.length; i++)
242 {
243 if(!stick_p._ants[i].isLeave())
244 antDivs_p[i].style.left = 110+stick_p._ants[i]._pos;
245 }
246 }
247 function doSolute(group)
248 {
249 //for(var i=0; i<this._sticks.length; i++)
250 //{
251 this.doTest(this._sticks[group]);
252 //}
253 }
254 function doSort()
255 {
256 var _min = this._results[0];
257 var _max = this._resules[0];
258 for(var i=1; i<this._results.length; i++)
259 {
260 if(_min>this._results[i])
261 _min = this._results[i];
262 if(_max<this._results[i])
263 _max = this._results[i];
264 }
265 alert("最短时间:"+_min+" 最大时间:"+_max);
266 }
267 function manager()
268 {
269 this._ants = new Array();
270 this._sticks = new Array();
271 this._results = new Array();
272
273 this.initAnts = initAnts;
274 this.initSticks = initSticks;
275 this.doTest = doTest;
276 this.doSolute = doSolute;
277 this.doSort = doSort;
278 }
C#:2 {//debugger;
3 this._pos += this._dir*this._speed;
4 }
5 function whenMeet()
6 {
7 this._dir = -1*this._dir;
8 }
9 function subMakeAnts(pos)
10 {
11 var _res = new Array();
12 var _ant_1 = new ants();
13 _ant_1._pos = pos;
14 _ant_1._dir = 1;
15 _res.push(_ant_1);
16 var _ant_2 = new ants();
17 _ant_2._pos = pos;
18 _ant_2._dir = -1;
19 _res.push(_ant_2);
20
21 return _res;
22 }
23 function makeAntGroup(tempAnts,indexs)
24 {
25 var _res = new Array();
26 _res.push(tempAnts[0][indexs[0]]);
27 _res.push(tempAnts[1][indexs[1]]);
28 _res.push(tempAnts[2][indexs[2]]);
29 _res.push(tempAnts[3][indexs[3]]);
30 _res.push(tempAnts[4][indexs[4]]);
31 return _res;
32 }
33 function makeTempAnts()
34 {
35 var _pos = new Array();
36 _pos.push(60);
37 _pos.push(160);
38 _pos.push(220);
39 _pos.push(320);
40 _pos.push(500);
41 var _tempAnts = new Array();
42 for(var i=0; i<_pos.length; i++)
43 {
44 _tempAnts.push(subMakeAnts(_pos[i]));
45 }
46 return _tempAnts;
47 }
48 function makeAnts()
49 {
50 var _tempAnts = makeTempAnts();
51 var _res = new Array();
52 for(var a=0; a<2; a++ )
53 {
54 for(var b=0; b<2; b++ )
55 {
56 for(var c=0; c<2; c++ )
57 {
58 for(var d=0; d<2; d++ )
59 {
60 for(var e=0; e<2; e++ )
61 {
62 var _indexs = new Array();
63 _indexs.push(a);
64 _indexs.push(b);
65 _indexs.push(c);
66 _indexs.push(d);
67 _indexs.push(e);
68 _res.push(makeAntGroup(_tempAnts,_indexs));
69 }
70 }
71 }
72 }
73 }
74 //alert(_res.length);//must32
75 return _res;
76 }
77
78 function isLeave()
79 {
80 if(this._pos<=0 || this._pos>=600)
81 {
82 return true;
83 }
84 return false;
85 }
86
87 function ants()
88 {
89 this._pos = 0;
90 this._dir = 1;
91 this._speed = 1;
92 this.walk = walk;
93 this.whenMeet = whenMeet;
94 this.makeAnts = makeAnts;
95 this.isLeave = isLeave;
96 }
97 /*-----------stick-------------*/
98 function makeSticks(ants)
99 {
100 var _res = new Array();
101 var _stick;
102 for(var i=0; i<ants.length; i++)
103 {
104 _stick = new sticks();
105 _stick._ants = ants[i];
106 _res.push(_stick);
107 }
108 return _res;
109 }
110
111 function judgeMeet()
112 {
113 for(var i=0; i<this._ants.length; i++)
114 {
115 for(var j=i+1;j<this._ants.length; j++)
116 {
117 if(this._ants[i]._pos == this._ants[j]._pos&&
118 !this._ants[i].isLeave()&&
119 !this._ants[j].isLeave()&&
120 j!=i)
121 {
122 this._ants[i].whenMeet();
123 this._ants[j].whenMeet();
124 }
125 }
126 }
127 }
128
129 function judgeAllLeave()
130 {
131 for(var i=0; i<this._ants.length; i++)
132 {
133 if(!this._ants[i].isLeave())
134 return false;
135 }
136 return true;
137 }
138
139 function moveAnts()
140 {
141 this._time +=1;
142 this.judgeMeet();
143 for(var i=0; i<this._ants.length; i++)
144 {
145 if(!this._ants[i].isLeave())
146 {
147 this._ants[i].walk();
148 }
149 }
150 }
151 function resetAnts()
152 {
153 /*
154 _pos.push(60);
155 _pos.push(160);
156 _pos.push(220);
157 _pos.push(320);
158 _pos.push(500);
159 this._ants[0]._pos
160 this._ants[1]
161 this._ants[2]
162 this._ants[3]
163 this._ants[4]
164 */
165 }
166 function sticks()
167 {
168 this._width = 600;
169 this._ants = new Array();
170 this._time = 0;
171
172 this.makeSticks = makeSticks;
173 this.judgeMeet = judgeMeet;
174 this.judgeAllLeave = judgeAllLeave;
175 this.moveAnts = moveAnts;
176 this.resetAnts = resetAnts;
177 }
178 /*----------manager------------*/
179 function initAnts()
180 {
181 var _ant = new ants();
182 this._ants = _ant.makeAnts();
183 }
184 function initSticks()
185 {
186 var _stick = new sticks();
187 this._sticks = _stick.makeSticks(this._ants);
188 }
189 var cal_p = 0;
190 var stick_p = null;
191 var antDivs_p = null;
192 function moveAntDivs()
193 {
194 for(var i=0; i<antDivs_p.length; i++)
195 {
196 antDivs_p[i].style.left = 88+stick_p._ants[i]._pos;
197 }
198 }
199 function doTest(stick)
200 {
201 var _antDivs = new Array();
202 var _antDiv;
203 //alert(stick._ants.length);//must5
204 for(var i=0; i<stick._ants.length; i++)
205 {
206 _antDiv = document.createElement("DIV");
207 _antDiv.style.position = "absolute";
208 _antDiv.style.width = 20;
209 _antDiv.style.height = 20;
210 _antDiv.innerText = i;
211 _antDiv.style.left = 110+stick._ants[i]._pos;
212 _antDiv.style.top = 225;
213 document.body.appendChild(_antDiv);
214 _antDivs.push(_antDiv);
215 }
216 stick_p = stick;
217 antDivs_p = _antDivs;
218 moveAction();
219 }
220 function moveAction()
221 {
222 moveDiv();
223 stick_p.moveAnts();
224 cal_p = 0;
225 if(stick_p.judgeAllLeave())
226 {
227 alert(stick_p._time/10+"S");
228 _manager._results.push(stick_p._time/10);
229 while(antDivs_p.length>0)
230 {
231 var _div = antDivs_p.pop();
232 document.body.removeChild(_div);
233 }
234 window.location.reload();
235 }
236 else
237 setTimeout("moveAction();",1);
238 }
239 function moveDiv()
240 {
241 for(var i=0; i<stick_p._ants.length; i++)
242 {
243 if(!stick_p._ants[i].isLeave())
244 antDivs_p[i].style.left = 110+stick_p._ants[i]._pos;
245 }
246 }
247 function doSolute(group)
248 {
249 //for(var i=0; i<this._sticks.length; i++)
250 //{
251 this.doTest(this._sticks[group]);
252 //}
253 }
254 function doSort()
255 {
256 var _min = this._results[0];
257 var _max = this._resules[0];
258 for(var i=1; i<this._results.length; i++)
259 {
260 if(_min>this._results[i])
261 _min = this._results[i];
262 if(_max<this._results[i])
263 _max = this._results[i];
264 }
265 alert("最短时间:"+_min+" 最大时间:"+_max);
266 }
267 function manager()
268 {
269 this._ants = new Array();
270 this._sticks = new Array();
271 this._results = new Array();
272
273 this.initAnts = initAnts;
274 this.initSticks = initSticks;
275 this.doTest = doTest;
276 this.doSolute = doSolute;
277 this.doSort = doSort;
278 }
1、Ant.cs
1
using System;
2
3
namespace AntExcise
4
{
5
/// <summary>
6
/// Ant 的摘要说明。
7
/// </summary>
8
public class Ant
9
{
10
private int _position;
11
private int _direction;
12
private int _speed;
13
public Ant()
14
{
15
//
16
// TODO: 在此处添加构造函数逻辑
17
//
18
}
19
20
public Ant(int position,int direction,int speed)
21
{
22
this._position = position;
23
this._direction = direction;
24
this._speed = speed;
25
}
26
public int Position
27
{
28
get{return this._position;}
29
set{this._position = value;}
30
}
31
public int Direction
32
{
33
get{return this._direction;}
34
set{this._direction=value;}
35
}
36
public int Speed
37
{
38
get{return this._speed;}
39
set{this._speed=value;}
40
}
41
// 行进
42
public void MoveForward()
43
{
44
this._position += this._speed*this._direction;
45
}
46
//掉头
47
public void TurnDirection()
48
{
49
this._direction = (-1)*this._direction;
50
}
51
//判断掉落
52
public bool IsDrop()
53
{
54
if(this._position<=0||this._position>=Stick.Length())
55
return true;
56
else
57
return false;
58
}
59
//判断与另外一只碰头
60
public bool IsMeetWith(Ant ant)
61
{
62
if(this._position==ant._position)
63
return true;
64
else
65
return false;
66
}
67
public static bool operator == (Ant antA,Ant antB)
68
{
69
return ((antA._direction == antB._direction)&&
70
(antA._position == antB._position)&&
71
(antA._speed == antB._speed));
72
}
73
public static bool operator != (Ant antA,Ant antB)
74
{
75
return ((antA._direction != antB._direction)||
76
(antA._position != antB._position)||
77
(antA._speed != antB._speed));
78
}
79
}
80
}
81
2、Environment.cs
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

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

1
using System;
2
using System.Collections;
3
using System.Windows.Forms;
4
5
namespace AntExcise
6
{
7
/// <summary>
8
/// Environment 的摘要说明。
9
/// </summary>
10
public class Environment
11
{
12
private ArrayList _instances;
13
private int _instanceNum;
14
public Environment()
15
{
16
//
17
// TODO: 在此处添加构造函数逻辑
18
//
19
this.InitInstances();
20
this._instanceNum = this._instances.Count;
21
}
22
public int getInstanceNum()
23
{
24
return this._instanceNum;
25
}
26
public Instance GetInstance(int index)
27
{
28
return (Instance)this._instances[index];
29
}
30
/*
31
private int getDir(int count,int dig)
32
{
33
string str = count.ToString();
34
if(str.Length<dig)
35
return -1;
36
else
37
return Convert.ToInt32(str.Substring(dig-1,1))==0?-1:1;
38
}
39
private int getInt(int num)
40
{
41
int res = 1;
42
for(int i=0; i<num; i++)
43
{
44
res*=2;
45
}
46
return res;
47
}
48
*/
49
//初始化所有场景
50
private void InitInstances()
51
{
52
/*
53
this._instances = new ArrayList();
54
ArrayList dir;
55
for(int count = 0;count<getInt(5);count++)
56
{
57
dir = new ArrayList();
58
dir.Add(getDir(count,1));
59
dir.Add(getDir(count,2));
60
dir.Add(getDir(count,3));
61
dir.Add(getDir(count,4));
62
dir.Add(getDir(count,5));
63
this._instances.Add(new Instance(dir));
64
}
65
*/
66
67
this._instances = new ArrayList();
68
ArrayList dir;
69
for(int a=0; a<2; a++ )
70
{
71
for(int b=0; b<2; b++ )
72
{
73
for(int c=0; c<2; c++ )
74
{
75
for(int d=0; d<2; d++ )
76
{
77
for(int e=0; e<2; e++ )
78
{
79
dir = new ArrayList();
80
dir.Add(a==0?-1:1);
81
dir.Add(b==0?-1:1);
82
dir.Add(c==0?-1:1);
83
dir.Add(d==0?-1:1);
84
dir.Add(e==0?-1:1);
85
this._instances.Add(new Instance(dir));
86
}
87
}
88
}
89
}
90
}
91
}
92
//a=b 2
93
//a>b 0
94
//a<b 1
95
private int CompareInstance(Instance instanceA,Instance instanceB)
96
{
97
int temp = instanceA.GetTimeCount()-instanceB.GetTimeCount();
98
if(temp==0)
99
return 2;
100
else if(temp>0)
101
return 0;
102
else//if(temp<0)
103
return 1;
104
105
}
106
public void Start()
107
{
108
this.RunInstanceAll();
109
}
110
public void RunInstanceAll()
111
{
112
Instance temp;
113
string _res = "";
114
for(int i=0; i<this._instanceNum; i++)
115
{
116
temp = (Instance)this._instances[i];
117
temp.Run();
118
_res+=temp.GetTimeCount().ToString()+"_";
119
}
120
//MessageBox.Show(_res);
121
//MessageBox.Show(this.GetMin().GetTimeCount().ToString());
122
}
123
//时间值最大的场景
124
public Instance GetMax()
125
{
126
Instance tempIns = (Instance)this._instances[0];
127
for(int i=0; i<this._instances.Count; i++)
128
{
129
if(this.CompareInstance(tempIns,(Instance)this._instances[i])==1)
130
{
131
tempIns = (Instance)this._instances[i];
132
}
133
}
134
return tempIns;
135
}
136
//时间值最小的场景
137
public Instance GetMin()
138
{
139
Instance tempIns = (Instance)this._instances[0];
140
for(int i=0; i<this._instances.Count; i++)
141
{
142
143
if(this.CompareInstance(tempIns,(Instance)this._instances[i])==0)
144
{
145
tempIns = (Instance)this._instances[i];
146
}
147
}
148
return tempIns;
149
}
150
151
}
152
}
153
3、Instance.cs
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

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

1
using System;
2
using System.Collections;
3
using System.Windows.Forms;
4
5
namespace AntExcise
6
{
7
/// <summary>
8
/// Instance 的摘要说明。
9
/// </summary>
10
public class Instance
11
{
12
private ArrayList _ants;
13
private Stick _stick;
14
private int _timeCount;
15
//通过GroupID来初始化
16
public Instance(int groupID)
17
{
18
//
19
// TODO: 在此处添加构造函数逻辑
20
//
21
}
22
public Instance(ArrayList directions)
23
{
24
this._timeCount = 0;
25
this.InitStick();
26
this.InitAnts(directions);
27
}
28
public int GetTimeCount()
29
{
30
return this._timeCount;
31
}
32
public Ant GetAnt(int index)
33
{
34
return (Ant)this._ants[index];
35
}
36
//初始化棍子
37
private void InitStick()
38
{
39
this._stick = new Stick();
40
int _length = 300;
41
int [] pos = {30,80,110,160,250};
42
this._stick.SetLength(_length);
43
this._stick.SetPositions(pos);
44
}
45
////通过蚂蚁方向来初始化蚂蚁
46
private void InitAnts(ArrayList dir)
47
{
48
this._ants = new ArrayList();
49
int [] _pos = this._stick.GetPositions();
50
Ant ant;
51
ant = new Ant(_pos[0],(int)dir[0],5);
52
this._ants.Add(ant);
53
ant = new Ant(_pos[1],(int)dir[1],5);
54
this._ants.Add(ant);
55
ant = new Ant(_pos[2],(int)dir[2],5);
56
this._ants.Add(ant);
57
ant = new Ant(_pos[3],(int)dir[3],5);
58
this._ants.Add(ant);
59
ant = new Ant(_pos[4],(int)dir[4],5);
60
this._ants.Add(ant);
61
}
62
//所有蚂蚁行动起来
63
public void MoveAnts()
64
{
65
Ant ant;
66
for(int i=this._ants.Count-1;i>=0;i--)
67
{
68
ant = (Ant)this._ants[i];
69
if(!ant.IsDrop())
70
ant.MoveForward();
71
}
72
}
73
//时间累加
74
private void TimeAdd()
75
{
76
this._timeCount++;
77
}
78
//是否所有的都掉下来
79
public bool IsAllDropped()
80
{
81
foreach(Ant ant in this._ants)
82
{
83
if(!ant.IsDrop())
84
return false;
85
}
86
return true;
87
}
88
89
//处理相遇的蚂蚁
90
private void ProcMeet()
91
{
92
Ant tempA;
93
Ant tempB;
94
for(int i=0; i<this._ants.Count; i++)
95
{
96
for(int j=i+1;j<this._ants.Count; j++)
97
{
98
tempA = (Ant)this._ants[i];
99
tempB = (Ant)this._ants[j];
100
if(tempA.IsMeetWith(tempB)&&
101
!tempA.IsDrop()&&
102
!tempB.IsDrop()&&
103
j!=i)
104
{
105
tempA.TurnDirection();
106
tempB.TurnDirection();
107
}
108
}
109
}
110
}
111
//单步运行
112
public void RunStep()
113
{
114
this.MoveAnts();
115
this.ProcMeet();
116
this.TimeAdd();
117
}
118
//运行场景
119
public void Run()
120
{
121
while(!this.IsAllDropped())
122
{
123
this.RunStep();
124
}
125
}
126
}
127
}
128

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

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

4、 Stick.cs
1
using System;
2
using System.Collections;
3
4
namespace AntExcise
5
{
6
/// <summary>
7
/// Stick 的摘要说明。
8
/// </summary>
9
public class Stick
10
{
11
private static int _length;
12
private int [] _positions;
13
public Stick()
14
{
15
//
16
// TODO: 在此处添加构造函数逻辑
17
//
18
}
19
public Stick(int length)
20
{
21
_length = length;
22
}
23
public void SetPositions(int [] pos)
24
{
25
this._positions = pos;
26
}
27
public void SetLength(int length)
28
{
29
_length = length;
30
}
31
public int GetLength()
32
{
33
return _length;
34
}
35
public int [] GetPositions()
36
{
37
return this._positions;
38
}
39
public static int Length()
40
{
41
return _length;
42
}
43
}
44
}
45

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
