• pku1204 Word Puzzles


    这题目其实也不难,要有勇气去写这个代码,额,不过我第一次TLE了,我以为应该会超时的,太小看这个三个循环了

    记录下八个方向,本来想一边读入一遍查找的,省得记录结果,不过真的太慢了,所以只好开 一个二维的数组记录咯,

    插入的操作基本跟之前的一样,就是查询的时候用递归的方式,这是为了方向看,同时写代码也轻松了许多啦,比较直观

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    typedef struct node
    {
    	node *next[26];
    	int id;
    }*tree,t;
    tree root;
    int px,py;
    char str[1001][1001];
    int res[1001][3];
    int n,m,w;
    int dir[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};//八个方向
    void insert(char *s1,int d)
    {
    	tree p=root,newnode;
    	for(;*s1!='\0';s1++)
    	{
    		int i=*s1-'A';
    		if(p->next[i]!=NULL)
    			p=p->next[i];
    		else 
    		{
    			newnode=(tree)malloc(sizeof(t));
    			for(int j=0;j<26;j++)
    			newnode->next[j]=NULL;
    			newnode->id=-1;
    			p->next[i]=newnode;
    			p=newnode;
    		}
    	}
    	p->id=d;
    }
    void search(tree p,int x,int y,int k)
    {
    	int i=str[x][y]-'A';
    	if(p==NULL)
    		return ;
    	if(p->id>-1)//查找到单词,id同时记录了该单词读入时的查询顺序
    	{
    		res[p->id][0]=px;
    		res[p->id][1]=py;
    		res[p->id][2]=k;
    	}
    	if(x>=n||x<0||y>=m||y<0)
    		return ;
    	search(p->next[i],x+dir[k][0],y+dir[k][1],k);//递归查询k方向上的下一个字母
    }
    void solve()
    {
    	int i,j,k;
    	for(i=0;i<n;i++)
    		for(j=0;j<m;j++)
    			for(k=0;k<8;k++)
    			{
    				px=i;//记录起始坐标
    				py=j;
    				search(root,i,j,k);
    			}
    }
    void input()
    {
    	int i,j;
    	char sub[1010];
    	scanf("%d %d %d",&n,&m,&w);
    	getchar();
    	for(i=0;i<n;i++)
    		gets(str[i]);
    	root=(tree)malloc(sizeof(t));
    	for(i=0;i<26;i++)
    		root->next[i]=NULL;
    	root->id=-1;
    	for(j=0;j<w;j++)
    	{
    		gets(sub);
    		insert(sub,j);
    	}
    }
    void output()
    {
    	for(int i=0;i<w;i++)
    		printf("%d %d %c\n",res[i][0],res[i][1],res[i][2]+'A');
    }
    
    int main()
    {
    	input();
    	solve();
    	output();
    	return 0;
    }
    
  • 相关阅读:
    压缩命令
    常用命令7-帮助命令1
    常用命令6--文件搜索命令4-grep
    常用命令5--文件搜索命令3-find
    常用命令4-文件搜索命令 2- which
    【转】Castle开发系列文章
    【摘录】C#多线程编程
    优化一
    Value Shadowing(不明確的方式存取变量)
    portability flaw : file separator (可移植性缺陷:文件分隔符)
  • 原文地址:https://www.cnblogs.com/nanke/p/2045865.html
Copyright © 2020-2023  润新知