这次作业比较变态。特别是矩阵的生成,所以我去网上找了个python的开源实现
由于是软件工程课,实现目的才是第一位的。毕竟这种代码一般很难搞出最优解,搞出来也不是本门课的目标了。
希望主角海涵,给个好点的分数,毕竟这次作业的目的我达到了。
我所做的就是用已有的生成代码,生成一个尽可能紧凑的矩阵,然后我暂时没想到有什么好的办法,就果断从5到30(最大值),暴力枚举了
计算主要是交给shell程序做的。我使用了临时文件来分析结果,用了管道来输出结果:
# -*- coding: utf-8 -*- #由于这是一门关于软件工程的课,所以我使用了别人的算法,但是也可以做到较好的完成目标 import os, sys def go(): if len(sys.argv) < 2: print 'need a parameter' return path = sys.argv[1] if not os.path.isfile(path): print 'need a file' return path = os.path.abspath(path) f = open(path) words = 0 for i in range(5,31): cmd = 'python assist/wordsearch.py '+path+' --grid '+str(i)+' '+str(i)+' >t123.txt' os.system(cmd) f = open('t123.txt') buf = f.read() f.close() os.remove('t123.txt') lines = [t for t in buf.split(' ') if t.strip()!=''] twords = int(lines[-1].split()[0]) if twords > words: words = twords l = i; cmd = 'python assist/wordsearch.py '+path+' --grid '+str(l)+' '+str(l)+' >t123.txt' os.system(cmd) f = open('t123.txt') buf = f.read() f.close() os.remove('t123.txt') buf = buf.split(' ')[1:1+l] print ' '.join(buf) if __name__ == '__main__': go()