有趣的A*算法演示

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10
 11 namespace A星算法
 12 {
 13     public partial class Form1 : Form
 14     {
 15         int x_count = 20;
 16         int y_count = 20;
 17         //List<AStarMapType> MapData;
 18         AStarMap Map;
 19         //List<Position> Path;
 20         Position start_pos, end_pos;
 21
 22         int x_last_pos, y_last_pos;
 23         int mode;
 24         public Form1()
 25         {
 26             InitializeComponent();
 27             Map = new AStarMap(x_count, y_count);
 28
 29
 30         }
 31
 32
 33
 34         public void redraw()
 35         {
 36             Graphics g = pictureBox1.CreateGraphics();
 37             g.DrawRectangle(Pens.Black, 0, 0, pictureBox1.ClientSize.Width - 1, pictureBox1.ClientSize.Height - 1);
 38             double x_step = (double)(pictureBox1.ClientSize.Width) / x_count;
 39             double y_step = (double)(pictureBox1.ClientSize.Height) / y_count;
 40
 41             for (int x = 0; x < x_count; x++)
 42             {
 43                 for (int y = 0; y < y_count; y++)
 44                 {
 45                     //g.DrawRectangle(Pens.Black, (float)(x * x_step), (float)(y * y_step), (float)x_step, (float)y_step);
 46                     drawBox(x, y);
 47
 48                 }
 49             }
 50
 51
 52         }
 53
 54         //public void clearBox(int x, int y)
 55         //{
 56         //    Graphics g = pictureBox1.CreateGraphics();
 57         //    double x_step = (double)(pictureBox1.ClientSize.Width) / x_count;
 58         //    double y_step = (double)(pictureBox1.ClientSize.Height) / y_count;
 59         //    g.FillRectangle(Brushes.White, (float)(x * x_step), (float)(y * y_step), (float)x_step, (float)y_step);
 60         //}
 61
 62         public void drawBox(int x, int y)
 63         {
 64             Graphics g = pictureBox1.CreateGraphics();
 65             Position pos = new Position(x, y);
 66
 67             double x_step = (double)(pictureBox1.ClientSize.Width) / x_count;
 68             double y_step = (double)(pictureBox1.ClientSize.Height) / y_count;
 69             g.FillRectangle(Brushes.White, (float)(x * x_step), (float)(y * y_step), (float)x_step, (float)y_step);
 70             g.DrawRectangle(Pens.Black, (float)(x * x_step), (float)(y * y_step), (float)x_step, (float)y_step);
 71             if (Map.GetMapType(pos) == 0)
 72             {
 73                 //   g.DrawRectangle(Pens.Black, (float)(x * x_step), (float)(y * y_step), (float)x_step, (float)y_step);
 74             }
 75             if (Map.GetMapType(pos) == 1)
 76                 g.FillRectangle(Brushes.Brown, (float)(x * x_step) + 1, (float)(y * y_step) + 1, (float)x_step - 2, (float)y_step - 2);
 77
 78
 79             if (start_pos != null)
 80                 if (pos == start_pos)
 81                 {
 82                     g.FillEllipse(Brushes.OrangeRed, (float)(x * x_step) + 4, (float)(y * y_step) + 4, (float)x_step - 8, (float)y_step - 8);
 83                 }
 84             if (end_pos != null)
 85                 if (pos == end_pos)
 86                 {
 87                     g.FillEllipse(Brushes.DarkGreen, (float)(x * x_step) + 4, (float)(y * y_step) + 4, (float)x_step - 8, (float)y_step - 8);
 88                 }
 89             //if (Path != null)
 90             //{
 91             //    var f = from m in Path where (m.X == x && m.Y == y) select m;
 92             //    if (f.Count() > 0)
 93             //    {
 94             //        g.FillEllipse(Brushes.OrangeRed, (float)(x * x_step) + 4, (float)(y * y_step) + 4, (float)x_step - 8, (float)y_step - 8);
 95             //    }
 96             //}
 97         }
 98
 99         private void button1_Click(object sender, EventArgs e)
100         {
101             mode = 1;
102         }
103
104
105         private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
106         {
107             double x_step = (double)(pictureBox1.ClientSize.Width) / x_count;
108             double y_step = (double)(pictureBox1.ClientSize.Height) / y_count;
109             int x_pos = (int)(e.X / x_step);
110             int y_pos = (int)(e.Y / y_step);
111             if (x_last_pos != x_pos || y_last_pos != y_pos)
112             {
113                 x_last_pos = x_pos;
114                 y_last_pos = y_pos;
115
116             }
117         }
118
119         private void Form1_Load(object sender, EventArgs e)
120         {
121             pictureBox1.Refresh();
122         }
123
124         private void pictureBox1_Paint(object sender, PaintEventArgs e)
125         {
126             redraw();
127         }
128
129         private void button2_Click(object sender, EventArgs e)
130         {
131             mode = 2;
132         }
133
134
135         //public void clear_start()
136         //{
137         //    for (int y = 0; y < y_count; y++)
138         //    {
139         //        for (int x = 0; x < x_count; x++)
140         //        {
141         //            if (Map.GetMapType(x, y) == 3)
142         //            {
143         //                Map.SetMapType(x, y, 0);
144         //                drawBox(x, y);
145         //            }
146         //        }
147         //    }
148         //}
149
150         //public void clear_end()
151         //{
152         //    for (int y = 0; y < y_count; y++)
153         //    {
154         //        for (int x = 0; x < x_count; x++)
155         //        {
156         //            if (Map.GetMapType(x, y) == 4)
157         //            {
158         //                Map.SetMapType(x, y, 0);
159         //                drawBox(x, y);
160         //            }
161         //        }
162         //    }
163         //}
164
165
166
167         private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
168         {
169             double x_step = (double)(pictureBox1.ClientSize.Width) / x_count;
170             double y_step = (double)(pictureBox1.ClientSize.Height) / y_count;
171             int x_pos = (int)(e.X / x_step);
172             int y_pos = (int)(e.Y / y_step);
173
174             Position pos = new Position(x_pos, y_pos);
175
176             if (mode == 1)
177             {
178                 Map.SetMapType(pos, 1);
179                 drawBox(x_pos, y_pos);
180             }
181             if (mode == 2)
182             {
183                 Map.SetMapType(pos, 0);
184                 drawBox(x_pos, y_pos);
185             }
186             if (mode == 3 && Map.GetMapType(pos) == 0)
187             {
188                 if (start_pos != null)
189                 {
190                     int x = start_pos.X;
191                     int y = start_pos.Y;
192                     start_pos = null;
193                     drawBox(x, y);
194                 }
195                 start_pos = pos;
196                 drawBox(x_pos, y_pos);
197             }
198             if (mode == 4 && Map.GetMapType(pos) == 0)
199             {
200                 if (end_pos != null)
201                 {
202                     int x = end_pos.X;
203                     int y = end_pos.Y;
204                     end_pos = null;
205                     drawBox(x, y);
206                 }
207                 end_pos = pos;
208                 drawBox(x_pos, y_pos);
209             }
210         }
211
212         private void button3_Click(object sender, EventArgs e)
213         {
214             Map.MapData.Clear();
215             for (int y = 0; y < y_count; y++)
216             {
217                 for (int x = 0; x < x_count; x++)
218                 {
219                     Map.MapData.Add(new AStarMapData(x, y));
220                 }
221             }
222             redraw();
223             mode = 0;
224         }
225
226         private void button4_Click(object sender, EventArgs e)
227         {
228             mode = 3;
229
230         }
231
232         private void button5_Click(object sender, EventArgs e)
233         {
234             mode = 4;
235         }
236
237         public void drawPath(List<Position> path)
238         {
239             Graphics g = pictureBox1.CreateGraphics();
240             double x_step = (double)(pictureBox1.ClientSize.Width) / x_count;
241             double y_step = (double)(pictureBox1.ClientSize.Height) / y_count;
242             path.Remove(path.First());
243             path.Remove(path.Last());
244             foreach (Position p in path)
245             {
246                 int x = p.X;
247                 int y = p.Y;
248                 g.FillEllipse(Brushes.LightSeaGreen, (float)(x * x_step) + 4, (float)(y * y_step) + 4, (float)x_step - 8, (float)y_step - 8);
249             }
250
251         }
252
253         private void button6_Click(object sender, EventArgs e)
254         {
255             if (start_pos != null && end_pos != null)
256             {
257                 AStarSearch s = new AStarSearch(Map, start_pos, end_pos);
258                 if (s.search_path() == 0)
259                 {
260                     drawPath(s.Result);
261                 }
262             }
263         }
264     }
265 }
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Diagnostics;
  4 using System.Linq;
  5 using System.Text;
  6 using System.Threading.Tasks;
  7
  8 namespace A星算法
  9 {
 10     class AStarSearch
 11     {
 12         //AStarMapType startNode, endNode;
 13         List<AStarMapData> OpenList;
 14         List<AStarMapData> CloseList;
 15         AStarMap map;
 16         Position StartPos, EndPos;
 17         public List<Position> Result;
 18
 19         public AStarSearch(AStarMap m, Position start_pos, Position end_pos)
 20         {
 21             map = m;
 22             StartPos = start_pos;
 23             EndPos = end_pos;
 24             OpenList = new List<AStarMapData>();
 25             CloseList = new List<AStarMapData>();
 26             Result = new List<Position>();
 27         }
 28
 29
 30         public bool CheckMap(Position pos)
 31         {
 32             if (pos.X < 0 || pos.Y < 0 || pos.X >= map.Width || pos.Y >= map.Height)
 33                 return false;
 34             int r = map.GetMapType(pos);
 35             if (r == 0 || r == 4)
 36                 return true;
 37             else
 38                 return false;
 39         }
 40
 41         public bool CheckInOpenList(Position pos)
 42         {
 43             var f = from x in OpenList where x.Pos == pos select x;
 44             if (f.Count() > 0)
 45                 return true;
 46             else
 47                 return false;
 48         }
 49
 50
 51         public bool CheckInCloseList(Position pos)
 52         {
 53             var f = from x in CloseList where x.Pos == pos select x;
 54             if (f.Count() > 0)
 55                 return true;
 56             else
 57                 return false;
 58         }
 59
 60
 61         public int Cal_H(Position a, Position b)
 62         {
 63             return (Math.Abs(a.X - b.X) + Math.Abs(a.Y - b.Y)) * 10;
 64         }
 65
 66         public int search_path()
 67         {
 68             int res = -1;
 69
 70             OpenList.Add(map.GetMapData(StartPos));
 71
 72             while (true)
 73             {
 74                 if (OpenList.Count == 0)
 75                 {
 76                     res = 1;
 77                     break;
 78                 }
 79                 else
 80                 {
 81                     var f = from x in OpenList orderby x.F select x;
 82                     AStarMapData curMapData = f.First();
 83                     Position pos = curMapData.Pos;
 84                     if (pos == EndPos)
 85                     {
 86                         res = 0;
 87                         break;
 88                     }
 89                     Debug.WriteLine(pos.ToString());
 90                     CloseList.Add(curMapData);
 91                     OpenList.Remove(f.First());
 92
 93                     #region 左上方
 94                     {
 95                         Position pos1 = new Position(pos.X - 1, pos.Y - 1);
 96                         if (CheckMap(pos1))
 97                         {
 98                             if (CheckInCloseList(pos1) == false)
 99                             {
100                                 AStarMapData md = map.GetMapData(pos1);
101                                 if (CheckInOpenList(pos1) == true)
102                                 {
103                                     if (md.F > curMapData.F + 14)
104                                     {
105                                         md.G = curMapData.F + 14;
106                                         md.H = Cal_H(pos1, EndPos);
107                                         md.F = md.G + md.H;
108                                         md.LastPos = curMapData.Pos;
109                                     }
110                                 }
111                                 else
112                                 {
113                                     md.G = curMapData.F + 14;
114                                     md.H = Cal_H(pos1, EndPos);
115                                     md.F = md.G + md.H;
116                                     md.LastPos = curMapData.Pos;
117                                     OpenList.Add(md);
118                                 }
119                             }
120                         }
121                     }
122                     #endregion
123
124                     #region 上方
125                     {
126                         Position pos1 = new Position(pos.X, pos.Y - 1);
127                         if (CheckMap(pos1))
128                         {
129                             if (CheckInCloseList(pos1) == false)
130                             {
131                                 AStarMapData md = map.GetMapData(pos1);
132                                 if (CheckInOpenList(pos1) == true)
133                                 {
134                                     if (md.F > curMapData.F + 10)
135                                     {
136                                         md.G = curMapData.F + 10;
137                                         md.H = Cal_H(pos1, EndPos);
138                                         md.F = md.G + md.H;
139                                         md.LastPos = curMapData.Pos;
140                                     }
141                                 }
142                                 else
143                                 {
144                                     md.G = curMapData.F + 10;
145                                     md.H = Cal_H(pos1, EndPos);
146                                     md.F = md.G + md.H;
147                                     md.LastPos = curMapData.Pos;
148                                     OpenList.Add(md);
149                                 }
150                             }
151                         }
152                     }
153                     #endregion
154
155                     #region 右上方
156                     {
157                         Position pos1 = new Position(pos.X + 1, pos.Y - 1);
158                         if (CheckMap(pos1))
159                         {
160                             if (CheckInCloseList(pos1) == false)
161                             {
162                                 AStarMapData md = map.GetMapData(pos1);
163                                 if (CheckInOpenList(pos1) == true)
164                                 {
165                                     if (md.F > curMapData.F + 14)
166                                     {
167                                         md.G = curMapData.F + 14;
168                                         md.H = Cal_H(pos1, EndPos);
169                                         md.F = md.G + md.H;
170                                         md.LastPos = curMapData.Pos;
171                                     }
172                                 }
173                                 else
174                                 {
175                                     md.G = curMapData.F + 14;
176                                     md.H = Cal_H(pos1, EndPos);
177                                     md.F = md.G + md.H;
178                                     md.LastPos = curMapData.Pos;
179                                     OpenList.Add(md);
180                                 }
181                             }
182                         }
183                     }
184                     #endregion
185
186                     #region 左方
187                     {
188                         Position pos1 = new Position(pos.X - 1, pos.Y);
189                         if (CheckMap(pos1))
190                         {
191                             if (CheckInCloseList(pos1) == false)
192                             {
193                                 AStarMapData md = map.GetMapData(pos1);
194                                 if (CheckInOpenList(pos1) == true)
195                                 {
196                                     if (md.F > curMapData.F + 10)
197                                     {
198                                         md.G = curMapData.F + 10;
199                                         md.H = Cal_H(pos1, EndPos);
200                                         md.F = md.G + md.H;
201                                         md.LastPos = curMapData.Pos;
202                                     }
203                                 }
204                                 else
205                                 {
206                                     md.G = curMapData.F + 10;
207                                     md.H = Cal_H(pos1, EndPos);
208                                     md.F = md.G + md.H;
209                                     md.LastPos = curMapData.Pos;
210                                     OpenList.Add(md);
211                                 }
212                             }
213                         }
214                     }
215                     #endregion
216
217                     #region 右方
218                     {
219                         Position pos1 = new Position(pos.X + 1, pos.Y);
220                         if (CheckMap(pos1))
221                         {
222                             if (CheckInCloseList(pos1) == false)
223                             {
224                                 AStarMapData md = map.GetMapData(pos1);
225                                 if (CheckInOpenList(pos1) == true)
226                                 {
227                                     if (md.F > curMapData.F + 10)
228                                     {
229                                         md.G = curMapData.F + 10;
230                                         md.H = Cal_H(pos1, EndPos);
231                                         md.F = md.G + md.H;
232                                         md.LastPos = curMapData.Pos;
233                                     }
234                                 }
235                                 else
236                                 {
237                                     md.G = curMapData.F + 10;
238                                     md.H = Cal_H(pos1, EndPos);
239                                     md.F = md.G + md.H;
240                                     md.LastPos = curMapData.Pos;
241                                     OpenList.Add(md);
242                                 }
243                             }
244                         }
245                     }
246                     #endregion
247
248                     #region 左下方
249                     {
250                         Position pos1 = new Position(pos.X - 1, pos.Y + 1);
251                         if (CheckMap(pos1))
252                         {
253                             if (CheckInCloseList(pos1) == false)
254                             {
255                                 AStarMapData md = map.GetMapData(pos1);
256                                 if (CheckInOpenList(pos1) == true)
257                                 {
258                                     if (md.F > curMapData.F + 14)
259                                     {
260                                         md.G = curMapData.F + 14;
261                                         md.H = Cal_H(pos1, EndPos);
262                                         md.F = md.G + md.H;
263                                         md.LastPos = curMapData.Pos;
264                                     }
265                                 }
266                                 else
267                                 {
268                                     md.G = curMapData.F + 14;
269                                     md.H = Cal_H(pos1, EndPos);
270                                     md.F = md.G + md.H;
271                                     md.LastPos = curMapData.Pos;
272                                     OpenList.Add(md);
273                                 }
274                             }
275                         }
276                     }
277                     #endregion
278
279                     #region 下方
280                     {
281                         Position pos1 = new Position(pos.X, pos.Y + 1);
282                         if (CheckMap(pos1))
283                         {
284                             if (CheckInCloseList(pos1) == false)
285                             {
286                                 AStarMapData md = map.GetMapData(pos1);
287                                 if (CheckInOpenList(pos1) == true)
288                                 {
289                                     if (md.F > curMapData.F + 10)
290                                     {
291                                         md.G = curMapData.F + 10;
292                                         md.H = Cal_H(pos1, EndPos);
293                                         md.F = md.G + md.H;
294                                         md.LastPos = curMapData.Pos;
295                                     }
296                                 }
297                                 else
298                                 {
299                                     md.G = curMapData.F + 10;
300                                     md.H = Cal_H(pos1, EndPos);
301                                     md.F = md.G + md.H;
302                                     md.LastPos = curMapData.Pos;
303                                     OpenList.Add(md);
304                                 }
305                             }
306                         }
307                     }
308                     #endregion
309
310                     #region 右下方
311                     {
312                         Position pos1 = new Position(pos.X + 1, pos.Y + 1);
313                         if (CheckMap(pos1))
314                         {
315                             if (CheckInCloseList(pos1) == false)
316                             {
317                                 AStarMapData md = map.GetMapData(pos1);
318                                 if (CheckInOpenList(pos1) == true)
319                                 {
320                                     if (md.F > curMapData.F + 14)
321                                     {
322                                         md.G = curMapData.F + 14;
323                                         md.H = Cal_H(pos1, EndPos);
324                                         md.F = md.G + md.H;
325                                         md.LastPos = curMapData.Pos;
326                                     }
327                                 }
328                                 else
329                                 {
330                                     md.G = curMapData.F + 14;
331                                     md.H = Cal_H(pos1, EndPos);
332                                     md.F = md.G + md.H;
333                                     md.LastPos = curMapData.Pos;
334                                     OpenList.Add(md);
335                                 }
336                             }
337                         }
338                     }
339                     #endregion
340
341
342                     if (CloseList.Count == 0)
343                     {
344                         res = 1;
345                         break;
346                     }
347
348                 }
349             }
350
351             if (res == 0)
352             {
353                 AStarMapData last = map.GetMapData(EndPos);
354                 Result.Add(last.Pos);
355                 while (true)
356                 {
357                     last = map.GetMapData(last.LastPos);
358                     Result.Add(last.Pos);
359                     if (last.Pos == StartPos)
360                         break;
361
362                 }
363                 Result.Reverse();
364             }
365             return res;
366         }
367     }
368 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace A星算法
 8 {
 9     class AStarMapData
10     {
11         public int 地图;
12         public int 类型;
13         public Position Pos;
14         public Position LastPos;
15         public int G;
16         public int H;
17         public int F;
18
19
20         public AStarMapData(int x, int y)
21         {
22             Pos = new Position(x, y);
23             LastPos = null;
24             G = 0;
25             H = 0;
26             F = 0;
27             地图 = 0;
28             类型 = 0;
29         }
30     }
31
32 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace A星算法
 8 {
 9     class AStarMap
10     {
11         public int Width;
12         public int Height;
13         public List<AStarMapData> MapData;
14
15
16         public AStarMap(int width, int height)
17         {
18             Width = width;
19             Height = height;
20             MapData = new List<AStarMapData>();
21             for (int y = 0; y < Height; y++)
22                 for (int x = 0; x < Width; x++)
23                 {
24                     MapData.Add(new AStarMapData(x, y));
25                 }
26         }
27
28         public AStarMap(int widht, int height, List<AStarMapData> mapdata)
29         {
30             Width = widht;
31             Height = height;
32             MapData = mapdata;
33         }
34
35         public AStarMapData GetMapData(Position pos)
36         {
37             return MapData[pos.Y * Width + pos.X];
38         }
39
40         //public AStarMapData GetMapData(int x, int y)
41         //{
42         //    return MapData[y * Width + x];
43         //}
44
45         public int GetMapType(Position pos)
46         {
47             return MapData[pos.Y * Width + pos.X].类型;
48         }
49
50         public void SetMapType(Position pos, int value)
51         {
52             MapData[pos.Y * Width + pos.X].类型 = value;
53         }
54
55         //public int GetMapType(int x, int y)
56         //{
57         //    return MapData[y * Width + x].类型;
58         //}
59
60         //public void SetMapType(int x, int y, int value)
61         //{
62         //    MapData[y * Width + x].类型 = value;
63         //}
64
65     }
66 }
时间: 2024-10-12 00:17:17

有趣的A*算法演示的相关文章

L3--数组算法演示

介绍 把所有的结点用一根线穿起来. 连续存储[数组] 离散存储[链表] 线性结构的两种常见的应用之一 栈 线性结构的两种常见的应用之二 队列(与时间相关的操作) 数组算法演示 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <stdbool.h> struct Arr { int * pBase; int len; int cnt; }; void init_arr(st

强算KMeans聚类算法演示器

这些天做C#实验以及这个KMeans算法演示器,学了一下openGL,感觉有待加强. //Point.h /* Point 结构体定义及实现 结构体重载了2个运算符: 1.== //推断两个Point的坐标值是否相等 2.<< //用于显示(以友元函数的方式重载) */ #ifndef Point_h_ #define Point_h_ #include <iostream> #include <string> #include <iomanip> usin

JS写的排序算法演示

看到网上有老外写的,就拿起自已之前完成的jmgraph画图组件也写了一个.想了解jmgraph的请移步:https://github.com/jiamao/jmgraph 当前演示请查看:http://graph.jm47.com/example/sort.html <!doctype html> <html> <head> <meta content="text/html; charset=UTF-8" http-equiv="co

dijkstra算法演示

dijkstra算法演示精髓 #include <iostream> #include <fstream> #include <cstring> #include <vector> #include <queue> #include <stack> #include <algorithm> #include <cmath> using namespace std; #define loop(i,n) for(i

GDI+学习笔记(九)带插件的排序算法演示器(MFC中的GDI+实例)

带插件的排序算法演示器 本节将通过一个实例来说明GDI+在MFC中的应用.这个算法演示器其实是本人算法系列的一个开端,由于csdn没有树状的目录结构,咱也只好使用链表了不是?好了,废话不多说,开始今天的文章. (一)功能说明 我们初步制定功能如下: (1). 能够通过柱状图,自动展示排序算法的交换比较过程 (2). 能够使用插件的形式进行开发.即,当新完成一个算法后,只需要完成一个插件文件(我们这里使用动态库dll),由主程序加载插件,即可进行执行,而不再需要重新编译主程序. (3). 保证主程

链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学习过算法的系统性的课程,现在还是处于不断摸索的阶段,好多算法题目根本就没有什么思路,导致自己对好多题目都很是头疼,就算是自己做过的一些算法的题目,再次遇到也还是不一定会做出来,他给出的建议就是,看懂别人的程序,然后自己去敲,一定会出错,然后调试,有错误接着调试,一直到没有错误为止,并且要时常的去复习

一个用来进行算法演示的网站

太原理工大学有一门数据结构的精品课程,课程给出了栈和队列.线性表.树.图以及查找和排序的算法演示过程. http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/default.asp 图: (1)拓扑排序算法思想:选一个入度为 0 的顶点输出,并将其所有后继顶点的入度—1,重复上述过程直至输出所有顶点,或找不到入度为 0 的顶点为止. 为便于查找入度为 0 的顶点,算法中利用顶点的入度域建立一个存放入度为 0 的顶点的栈.

汉诺塔算法演示1.0

工作之余闲来无聊,于是就有了用JS来实现算法演示的想法,很久以前用JS实现过选择排序,不过源程序找不到了! 汉诺塔的递归算法: void move(int n,char a,char b,char c) { if(n==1) printf("\t%c->%c\n",a,c); //当n只有1个的时候直接从a移动到c else { move(n-1,a,c,b); //第n-1个要从a通过c移动到b printf("\t%c->%c\n",a,c); mo

简单易懂的排序算法演示

本来是准备写一下自己的理解的,但发现要讲的易懂需要图文并茂才行,但我这渣渣的编辑工夫,终于还是放弃了. 不过要强烈推荐一个系列视频,叫"舞动的排序算法"大家如果有不懂得看一看,也许可以豁然开朗~ 网址:http://list.youku.com/albumlist/show?id=18906853&ascending=1&page=1