Weiss-(DSAA - in C,1.3)字谜游戏

来源:互联网 发布:淘宝子账号怎么申请 编辑:程序博客网 时间:2024/06/10 01:49

1.3 编写程序求解字谜游戏问题

/*    原理:由于字谜游戏,需要从不同方向组合,所以本程序大致上分了3个方向:  1.纵向 -- (含逆向和顺序) 2.横向 -- (同上)  3.对角 -- (左上,右上,左下,右下)  用循环厉遍字谜表中每一个元素,再对每个元素进行各个方向的匹配,找出正确的单词组合。  注意:注释中的 “方向1”为 左上   “方向3”为 右上                “方向2”为 右下   “方向4”为 左下采用直观的方法描述,由于是做习题,所以没有参考网上的答案。*/


#include <iostream>#include <string>using namespace std;string answer[5] = {"two","log","that","dog","odd"};size_t counter = 0;size_t total = sizeof(answer)/sizeof(string);void check(string vs){    for(int i=0;i<total;i++)    {        if (vs == answer[i])        {            counter++;            //cout<<"test:"<<vs<<endl;        }    }}int main(){    //字谜表    char guess[4][4] = {{'l','g','i','t'},                        {'t','o','d','a'},                        {'w','d','g','h'},                        {'o','g','d','t'},};    string str1 = "",str2 = "",str3 = "";    for (int i=0;i<=3;i++)    {        for (int j=0;j<=3;j++)        {            //--------------------------横向顺序--------------------------            for (int k=j;k<=3;k++)            {                str1 += guess[i][k];                check(str1);            }            //--------------------------横向逆序--------------------------            if (j!=0)            {                string str1_1 = "";                for (int k=j;k>=0;k--)                {                    str1_1 += guess[i][k];                    check(str1_1);                }            }            str1 = "";            //--------------------------纵向顺序--------------------------            for (int k=j;k<=3;k++)            {                str2 += guess[k][i];                check(str2);            }            //--------------------------纵向逆序--------------------------            if(i!=0)            {                string str2_2 = "";                for (int k=i;k>=0;k--)                {                    str2_2 += guess[k][j];                    check(str2_2);                }            }            str2 = "";            //---------------------------对角---------------------------            int indexI = 0,indexJ = 0;            //no problem!! 方向1            if(!(i==0||j==0))            {                indexI = i;                indexJ = j;                int d = (i<j?i:j);                if (i==j)                    d = i;                for (int k=d;k>=0;k--)                {                    str3 += guess[indexI--][indexJ--];                    check(str3);                }                str3 = "";            }            //done bug方向2            if(!(j==3||i==3))            {                indexI = i;                indexJ = j;                int d = i<j? j:i;//决定第三层循环的次数                for (int k=0;k<=3-d;k++)                {                    str3 += guess[indexI++][indexJ++];                    check(str3);                }                str3 = "";            }            //done bug.方向3            if (!(i==0 || j==3))            {                indexI = i;                indexJ = j;                int d;                if (i==1)                    d = i;                else if (i==2)                {                    if (j==0||j==1)                        d = 2;                    else                        d = 1;                }                else if (i==3)                    d = i-j;                for (int k=0;k<=d;k++)                {                    str3 += guess[indexI--][indexJ++];                    check(str3);                }                str3 = "";            }            //方向4            //done bug            if (!(i==3 || j==0))            {                indexI = i;                indexJ = j;                int d;                if (i==0)                    d = j;                else if (i==1)                {                    if (j==1)                        d = 1;                    else                        d = 2;                }                else if (i==2)                    d = 1;                for (int k=0;k<=d;k++)                {                    str3 += guess[indexI++][indexJ--];                    check(str3);                }                str3 = "";            }        }    }    cout<<"total number:"<<counter;    return 0;}






0 0