码迷,mamicode.com
首页 > 编程语言 > 详细

简单模拟算法(1)

时间:2019-06-22 21:17:40      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:gre   调用   pre   算法   amp   display   import   spl   size   

使用过python的pyautogui库的应该都知道官方文档有一个这样的例子:

技术图片

源码如下:

 1 import pyautogui
 2 
 3 distance = 200
 4 while distance > 0:
 5     pyautogui.dragRel(distance, 0, duration = 0.5) #
 6     distance -= 10
 7     pyautogui.dragRel(0, distance, duration = 0.5) #
 8     pyautogui.dragRel(-distance, 0, duration = 0.5) #
 9     distance -= 10
10     pyautogui.dragRel(0, -distance, duration = 0.5) #

这就类似于一个矩阵遍历方式,类似与我们所熟悉的深度优先搜索,在进入矩阵的时候一直贴着一边的墙壁运动,那么如何用c++来实现这样的一个算法呢?

首先定义一个矩阵来容纳这个区域:

1 const int maxn = 50;
2 int M[maxn][maxn] = {0};
3 int m_size = 1;

矩阵的最大范围是50*50,当然用vector<int>也行,矩阵默认大小为1。接着,需要定义一下搜索的方向,这里的顺序是右→下→左→上:

1 const int array_x[] = {0, 1, 0, -1};
2 const int array_y[] = {1, 0, -1, 0};
3 int dir = 0;

定义了两个方向向量,然后是用一个dir来表示当前前进的方向。当然,在矩阵中需要判断位置是否合适,我们默认数值0表示该位置还未走过:

1 bool check(int x, int y) {
2     if (x < 0 || x >= m_size || y < 0 || y >= m_size) {
3         return false;
4     }
5     if (M[x][y] > 0) {
6         return false;
7     }
8     return true;
9 }

最后,来定义一下在矩阵中行走的方法:

1 void run(int x, int y, int step = 1) {
2     if (check(x, y)) {
3         M[x][y] = step;
4         if (!check(x + array_x[dir], y + array_y[dir])) {
5             dir = (dir + 1) % 4;
6         }
7         run(x + array_x[dir], y + array_y[dir], step + 1);
8     }
9 }

从上面可以看出,每次走到矩阵的边缘的尽头时转换方向,如果下一个方向可以走就继续递归下去。为了方便查看矩阵行走的情况,来专门定义一个显示函数:

1 void display() {
2     for (int i = 0; i < m_size; i++) {
3         for (int j = 0; j < m_size; j++) {
4             printf("%-3d", M[i][j]);
5         }
6         printf("\n");
7     }
8 }

定义好了上面这些函数后,只需要在主函数中依次调用它们即可:

1 int main()
2 {
3     scanf("%d", &m_size);
4     run(0, 0);
5     display();
6     return 0;
7 }

最终运行情况如下:

技术图片

简单模拟算法(1)

标签:gre   调用   pre   算法   amp   display   import   spl   size   

原文地址:https://www.cnblogs.com/viewts/p/11070314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!