您所知道的无所谓,但是您对所知道的所做的事情很重要。

我在工程学期间做的一件事,是我在编程道路上开发的第一件事。 接下来的几句话是关于我如何做到的以及我从中学到的东西和从中受益的内容。

有一天下午,我的教授正在教n = 8的n-皇后问题,作为回溯算法的一个例子。 这完全是理论上的解释。 但是,我想到了如何在实践中实现它以及如何使其通用化? 在某种意义上是通用的,如何将其扩展到n,因为名称本身就表明这是一个由n个皇后玩的游戏

因此,最初我将算法设计如下。
1.从用户那里得到一个数字(n)并相应显示棋盘(n * n)。
2.对于每个女王,用户将要放置,计算其所有冲突位置并进行存储。
3.最后,使用存储的数据找到冲突的皇后区,然后将结果显示给用户。

下面是实现:

步骤1 –从用户那里获得一个号码并显示棋盘。

第2步–对于皇后的每个位置,需要查找所有8个方向上的所有碰撞位置,边缘和下一个数字。

这里的问题是女王的位置,即。 角(右上,左上,右下,左下),边缘(上,下,左,右)或中间。 根据位置,将有一个公式可以找出边数和下一个数。

左上方:

  下一个否= (queen_position-1)* i-board_size 
边缘:
如果((next_num%board_size)== 1)
返回true;
否则((((next_num-1)/ board_size)== 0)
返回true;
其他
返回false;

右上:

  下一个否= (queen_position + 1)* i-board_size 
边缘:
如果((next_num%board_size)== 0)
返回true;
否则((((next_num-1)/ board_size)== 0)
返回true;
其他
返回false;

左下方:

  下一个否= (queen_position-1)* i + board_size 
边缘:
如果((next_num%board_size)== 1)
返回true;
否则如果(((next_num-1)/ board_size)==(board_size-1))
返回true;
其他
返回false;

右下:

  下一个否= (queen_position + 1)* i + board_size 
边缘:
如果((next_num%board_size)== 0)
返回true;
否则如果(((next_num-1)/ board_size)==(board_size-1))
返回true;
其他
返回false;

最佳:

  下一个否= Queen_position-(board_size * i) 
边缘:
if((next_num-1)/ board_size == 0)
返回true;
其他
返回假

底部:

  下一个否= Queen_position +(board_size * i) 
边缘:
if((((next_num-1)/ board_size)==(board_size-1))
返回true;
其他
返回false;

剩下:

  下一个否= Queen_position-1 * i 
边缘:
if(next_num%board_size == 1)
返回true;
其他
返回false;

对:

  下一个否= Queen_position +1 * i 
边缘:
if(next_num%board_size == 0)
返回true;
其他
返回false;

将有8个数组。 对于每个皇后,将应用上述公式,并将结果推送到相应的数组。

从这些数组中,将计算出重复索引。

对于木板中的每个位置,最大重复指数将为
– 0,表示放置皇后的位置。
– 4用于放置皇后以外的位置。 因为板上的位置只有在存在的情况下才是不可冲突的,因此在所有八个阵列中最多只能有4次。

根据这些信誉指数,最终结果将计算如下:

如果对应于所有皇后区的答题索引为0,则用户赢得了这场比赛。 否则,用户将丢失游戏并显示色差,以通过使用引文索引向用户显示透明皇后号。

我学到的东西:

  1. 如何解决问题。
  2. 如何编写模块化代码。
  3. 代码质量的重要性。
  4. 如何编写可伸缩和可重用的代码。

好处:
这是我在编程中开发的第一件事,它给了我更多的信心。 有了这个,我做得很好,我的最后一年的项目。

2.在校园采访中我有话要说。

编程是在思考,而不是在打字。

链接:

源代码 游戏链接