瞧瞧两位女同学的结对编程

非常开心,这次的结队编程我和关腾组在了一起。微笑

我们算法的主要思想是:
程序采用倒排的思想,在第一次搜索棋谱的时候建立一个索引( l ocatio_index 哈希表),表示每个棋子位置出现的棋谱文件,及出现在此棋谱文件的第几步(每个索引项的类型都是一个自定义的结构体:chess_loction)。(例如,哈希表中有一项的值是:<B[eg],(”001.sgf;005.sgf”,”56,9”)> ,这表示:在第e行,第g列有个黑子(Black),它出现在001.sgf文件的第56步和005.sgf文件的第9步)
定义一个棋子的structchess),记录这个棋子的行值和列值以及颜色,用一个chess[] 数组来代表一个棋谱,数组的索引值就是下棋的步数,根据实际情况,均从1开始计数,即chess[i]表示第i步所下棋子的位置信息。在第一次搜索的时候,遍历500个棋谱文件建立locatio_index的同时也维护一个所有棋谱文件的哈希表(allManual),allManual每个键值都是一个chess[](即一个棋谱)。
在第一次建立好locatio_indexallManual之后,我们搜索棋谱时,均先分别从locatio_index中找出所输入棋谱每一步的匹配文件,再找这些文件的交集,本着优先考虑位置,其次考虑步数的思想进行查找(位置是步数的2倍权重),选出匹配度最高的前30个棋谱。
有了locatio_index allManual后,我们不必每一次查找都去访问500个棋谱文件,而是访问内存中的索引进行查询,程序性能有了很大提高。
实现程序:
         程序可以按照用户输入搜索棋谱,可以将用户的输入做90°旋转后搜索棋谱,还可以将用户输入的棋盘进行镜像变换后搜索棋谱。。
下面是程序运行的一些截图。
         按照老师所给的 007.sgf 文件,输入前六步:
         ;B[qd];W[dc];B[oc];W[qo];B[op];W[pq]
    如下图所示,搜索的第一个棋谱结果即是007.sgf
     1
     可以点击90 °旋转棋盘,再点击搜索棋谱,搜寻用户输入棋盘经过顺时针90°旋转后的查询结果。
    2
         可以点击镜面变换左棋盘,再点击搜索棋谱,搜寻用户输入棋盘经过 镜面变换后的查询结果。
    3
现在要贴工作照了!
关腾-吴洋 关腾--吴洋 吴洋-关腾
哈哈看看我们的手势(“首饰”)是不是很有默契呢~
 
 
 
 

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值