View Code of Problem 1082

#include <cstdio>
#include <cstring>
#include <cstdlib>
int dis[4][3]={{0,0,0},{0,1,0},{0,0,1},{0,1,1}};
struct node
{
    node *x[26];
    int num;
};
struct point
{
    int a,b;
};
point zuobiao[10010];
node *tree;
int r,c,ans;
char stu[510][510];
char ch[50];
void create(node *&tree)
{
    int i;
    tree=(node *)malloc(sizeof(node));
    tree->num=-1;
    for(i=0;i<26;++i)
        tree->x[i]=NULL;
}
void insertTree(int n)
{

    node *f=tree;
    int i,j,len=strlen(ch);
   // printf("CH  %s  LEN  %d\n",ch,len);
    for(i=0;i<len;++i)
    {
        int p=ch[i]-'A';
        if(f->x[p]==NULL)
        {
            f->x[p]=(node *)malloc(sizeof(node));
            f=f->x[p];
            f->num=-1;
            for(j=0;j<26;++j)
                f->x[j]=NULL;
        }
        else
        {
            f=f->x[p];
        }
    }
    f->num=n;
 //   printf("f->num=%d\n",f->num);
}
bool judge(int i,int j)
{
    if(i<r&&j<c)
    {
        return true;
    }
    return false;
}
void searchTree(int w,int m,int e)
{
    node *f=tree;
    int i=w,j=m;
    while(judge(i,j))
    {
     //   printf("i  %d  j  %d  e  %d\n",i,j,e);
        int p=stu[i][j]-'A';
        if(f->x[p]==NULL)
            return ;
        f=f->x[p];
        if(f->num!=-1)
        {
            int o=f->num;
        //    printf("+++++zuobiao[%d].a=%d  zuobiao[%d].b=%d\n",o,zuobiao[o].a,o,zuobiao[o].b);
            if(zuobiao[o].a==-1)
            {
                 zuobiao[o].a=w;
                 zuobiao[o].b=m;
       //          printf("zuobiao[%d].a=%d  zuobiao[%d].b=%d\n",o,zuobiao[o].a,o,zuobiao[o].b);
            }
        }
        if(e==1)
        {
            i+=dis[1][1];
            j+=dis[1][2];
        }
        else if(e==2)
        {
            i+=dis[2][1];
            j+=dis[2][2];
        }
        else if(e==3)
        {
            i+=dis[3][1];
            j+=dis[3][2];
        }
    }
}
int main()
{
    int i,j,k;
    scanf("%d%d",&r,&c);getchar();
    create(tree);
    for(i=0;i<r;++i)
    {
        scanf("%s",stu[i]);getchar();
    }
    getchar();
    int p=-1;
       while(scanf("%s",ch)&&strcmp(ch,"-1"))
        {
            ++p;
           zuobiao[p].a=-1;
           zuobiao[p].b=-1;
           insertTree(p);
        }
    for(i=0;i<r;++i)
    {
        for(j=0;j<c;++j)
        {
            for(k=1;k<=3;++k)
            {
                searchTree(i,j,k);
            }
        }
    }
//    printf("p=%d\n",p);
    for(i=0;i<=p;++i)
    {
        printf("%d %d\n",zuobiao[i].a,zuobiao[i].b);
    }
    return 0;
}

Double click to view unformatted code.


Back to problem 1082