您好,欢迎访问三七文档
1.“找词”游戏是在美国流行的一种游戏,它要求游戏者从一张填满字母的正方形表中,找出包含在一个给定集合中的所有词。这些词可以竖着读(向上或向下)、横着读(从左或从右),或者沿45度对角线斜着读(4个方向都可以),但这些词必须是由表格中邻接的连续的单元格组成。遇到表格的边界时可以环绕,但方向不得改变,也不能折来折去。表格中的同一单元格可以出现在不同的词中,但在任一词中,同一单元格不得出现一次以上。以下是一具体游戏事例,可以结合这个实例为该游戏设计一个蛮力算法(算法可以用文字描述,只要描述有一定的道理酌情加分)。如果定义方向如下:向右为方向1,右下为方向2,向下为方向3,则按顺时针8个方向依次为1,2,3,4,5,6,7,8。下面是一个查找结果(low,col为单词的起始位置行列,后面的数字为方向)。““VENUS”,”EARTH”,”MARS”,”CERES”,”ASTEROIDS”,”JUPITER”,”SATURN”,”NEPTUNE”,”URANUS”,”PLUTO”,”DWARF”,”PLANET”,”MOON”“{{DHOBSHNEPTUNEY},{UEJIHUNYSTHAOR},{DNAUUEEEMAENWA},{WNAIPLUTONAODH},{AGHPLIZOOERUSU},{RDEIHCTMNWTNSH},{FHYHOPBEOQHIUE},{RACOEAARRTEOAE},{USATURNCPLANET},{RTAEHFTUEULEEE},{IEUCUFAROVCEIO},{ARFAIRAYAOEIRH},{TOAINIABEARNAE},{OIATEOENAAEHUA},{EDIDDOEDUTSETS},{ESZEEHOPHSLUMS}}#includestdio.h#includestring.h#defineM16#defineN14chartest[M][N+1]={DHOBSHNEPTUNEY,UEJIHUNYSTHAOR,DNAUUEEEMAENWA,WNAIPLUTONAODH,AGHPLIZOOERUSU,RDEIHCTMNWTNSH,FHYHOPBEOQHIUE,RACOEAARRTEOAE,USATURNCPLANET,RTAEHFTUEULEEE,IEUCUFAROVCEIO,ARFAIRAYAOEIRH,TOAINIABEARNAE,OIATEOENAAEHUA,EDIDDOEDUTSETS,ESZEEHOPHSLUMS};charword[13][10]={VENUS,EARTH,MARS,CERES,ASTEROIDS,JUPITER,SATURN,NEPTUNE,URANUS,PLUTO,DWARF,PLANET,MOON};intsequence[10];//保留访问点的方向intcount=0;staticinta[M][N]={0},l0,c0;//a[M][N]记录是否访问,l0,c0,起始点位置voidprt1(char*w)//打印一个方案{intj,n=strlen(w);printf(No.%d,++count);printf(%slow%d:col:%dload:,w,l0,c0);for(j=1;jn;j++)printf(%-3d,sequence[j]);printf(\n);}intok(intl,intc)//当前位置满足条件{if(l=0&&lM&&c=0&&cN&&a[l][c]==0)return1;return0;}voidtry1(intl,intc,ints,char*w){//8个方向,右始为1方向,顺时针依次为1,2,3,4,5,6,7,8intdl[8]={l,l+1,l+1,l+1,l,l-1,l-1,l-1},dc[8]={c+1,c+1,c,c-1,c-1,c-1,c,c+1};inti;if(w[s]==0)//找到{prt1(w);return;}for(i=0;i8;i++)if(ok(dl[i],dc[i])&&test[dl[i]][dc[i]]==w[s]){a[dl[i]][dc[i]]=1;sequence[s]=i+1;//占用,记录方向try1(dl[i],dc[i],s+1,w);a[dl[i]][dc[i]]=0;//回溯,试下一位置}}voidfind1(){inti,j,k;for(k=0;k13;k++)for(i=0;iM;i++)for(j=0;jN;j++)if(test[i][j]==word[k][0]){l0=i,c0=j;try1(i,j,1,word[k]);}}intmain(){find1();return0;}/*实现财务中将数字转换成中文大写形式要求:输入任一数字,给出转换后结果。测试数据为一亿亿以下的数字,单位为零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆角整分。例子:如输入:3515135,输出:叁佰伍拾壹萬伍仟壹佰叁拾伍圆整。*/#includestdio.h#includestring.hintmain(){chartest[30],k,i,j,*p;chardig[10][3]={零,壹,贰,叁,肆,伍,陆,柒,捌,玖};charunit[4][3]={仟,,拾,佰};scanf(%s,test);p=test;while(*p=='0')p++;j=k=strlen(p);while(p[--j]!='.'&&j);if(j)j=k-j;i=0,k=k-j-1;*(p+i-1)='9';p=p+i;for(;k=0;i++,p++){if(*p-'0'!=0&&*(p-1)-'0'!=0)printf(%s%s,dig[*p-'0'],unit[(k+1)%4]);if(*p-'0'!=0&&*(p-1)-'0'==0)printf(零%s%s,dig[*p-'0'],unit[(k+1)%4]);if(k!=0){if(k%16==0)printf(億億);elseif(k%8==0)printf(億);elseif(k%4==0)printf(萬);}k--;}printf(圆);if(j!=0){p++;if(*p!='0')printf(%s角,dig[*p-'0']);if(*p=='0'&&*(p+1)!='0')printf(零);p++;if(*p!='0'&&*p!=0){printf(%s分,dig[*p-'0']);}}putchar('\n');return0;}
本文标题:找词游戏源码
链接地址:https://www.777doc.com/doc-4431444 .html