homework-04

1.关于基本解题思路

  这次的作业是要求生成一个单词矩阵,并且其中包含所给的单词,由自己的一些思路和上次课老师所讲的内容,解题的思路大致如下:

  1.将所有单词存入字符串数组word[i]中,二维整形数组pos[i][3]用来记录单词的位置信息。pos[i][0]记录单词word[i]的首字母在矩阵中的横坐标,pos[i][1]记录单词word[i]的首字母在矩阵中的纵坐标,pos[i][2]记录单词word[i]的方向(共8个方向)。

  2.先给第一个单词随机分配一个位置和方向,记录在pos[0]中,之后扫描第二个单词的每一个字母,如果有和第一个单词的字母相同的,就根据相同的字母给第二个单词随机分配一个方向(不能与第一个单词的方向相同),根据方向和相同字母的位置就可以计算出第二个单词的首字母位置;如果第二个单词中没有与第一个单词相同的字母,则给第二个单词随机分配一个位置与方向。

  3.在上述两种情况下插入第二个单词后,扫描矩阵是否会包含了未扫描过的单词,若包含,则在之后的循环扫描中不再包括该单词,否则正常扫描该单词。(这一步保证每个单词只出现一次)。之后开始比较第二个单词与第三个单词,依次循环扫描下去。

  4.为单词随机分配方向时,记录每个方向的单词个数。在后期循环中如果不能满足每个方向至少两个单词的话可以强行分配单词个数不足的方向。

  5.单词填完之后,填空余字母时也要扫描整个矩阵,防止同一个单词出现1次以上。

  6.如果想优化矩阵,可以仿佛循环扫描穷举所有的分配情况(如两个单词有一个以上的相同字母时所选的交叉字母和每个单词所分配的方向等)来使矩阵尽可能达到最优。

  7.目前尚未想出是矩阵最小和四个角都包含在单词里的优化算法。

2.关于程序

  这次的程序的算法由于较为复杂,所以程序未能编写完成。

    程序为使用WindowsForm框架的C#语言程序,可打开存有单词的txt文件,之后将生成的矩阵显示在一个DataGridView控件中,目前算法部分还未全部写完。

posted @ 2013-10-28 01:44  余明海  阅读(140)  评论(1编辑  收藏  举报