题意:在一个字符矩阵中找每个给定字符串的匹配起始位置和匹配方向(A到H表示八个方向);
思路:将给定字符串插入字典树中,遍历字符矩阵,在每个字符处向八个方向用字典树找。
#include#include #include using namespace std;typedef struct node{ int num; node *next[26];}node;node *head;char str[1005][1005],ch[1005][1005];int n,m,w;int x,y,direction;int result[1005][1005];int dir[8][2]={-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-1};void init(node *h){ for(int i=0;i<26;i++) { h->next[i]=NULL; h->num=0; }}void h_insert(char s[],int id)//建树{ node *t,*s1=head; int n=strlen(s); for(int i=0;i next[k]==NULL) { t=new node; init(t); s1->next[k]=t; } s1=s1->next[k]; } s1->num=id;}void dfs(node *p,int a,int b,int d)//搜索{ if(p==NULL) return; if(p->num>0) { result[p->num][0]=x; result[p->num][1]=y; result[p->num][2]=d; } if(a<0||b<0||a>=n||b>=m) return;//放在后面判断 dfs(p->next[str[a][b]-'A'],a+dir[d][0],b+dir[d][1],d);}int main(){ int i,j,k; while(scanf("%d%d%d",&n,&m,&w)!=EOF) { head=new node; init(head); memset(str,0,sizeof(str)); memset(ch,0,sizeof(ch)); memset(result,0,sizeof(result)); for(i=0;i