UVa 10010
2012-10-14 20:47
148 查看
字符串处理,按照8个方向之中的某个搜到即可(遍历时把每个点当做起始点向八个方向寻找)
开始没看清题....写成深搜了.....杯具.........
#include<stdio.h>
char matrix[51][51];
bool visited[50][50];
char targets[20][100];
int dire[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};
/*
int DFS(int x,int y,int m,int n,char * target)
{
int reuslt;
if(*target==0)
return 1;
if((x<0||y<0||x>=m||y>=n)&&visited[x][y]==1)
{
if(*target==0)
return 1;
else
return 0;
}
for(int i=0;i<8;++i)
{
if(matrix[x][y]==*target)
{
visited[x+dire[i][0]][y+dire[i][1]]=1;
if(x+dire[i][0]>=0&&x+dire[i][0]<m&&y+dire[i][1]>=0&&y+dire[i][1]<=n)
reuslt=DFS(x+dire[i][0],y+dire[i][1],m,n,target+1);
visited[x+dire[i][0]][y+dire[i][1]]=1;
return reuslt;
}
}
}
*/
int check(int x,int y,int m,int n)
{
return (x<m&&x>=0&&y<n&&y>=0);
}
int find(int x,int y,int m,int n,char * target)
{
//°Ë¸ö·½Ïò
int tx=x;
int ty=y;
int okay=1;
int dx;
int dy;
char *p=target;
for(int i=0;i<8;++i)
{
okay=1;
p=target;
dx=dire[i][0];
dy=dire[i][1];
tx=x;
ty=y;
while(check(tx,ty,m,n)&&*p)
{
if(*p!=matrix[tx][ty]||*p==0)
{
okay=0;
break;
}
tx+=dx;
ty+=dy;
p++;
}
if(*p!=0)
{
okay=0;
}
if(okay==1)
return 1;
}
return 0;
}
int main()
{
int mark=1;
int cases;
int m,n;
int k;
scanf("%d",&cases);
for(int i=0;i<cases;i++)
{
if(!mark)
printf("\n");
mark=0;
scanf("%d%d",&m,&n);
for(int j=0;j<m;++j)
{
scanf("%s",matrix[j]);
for(char *p=matrix[j];*p;++p)
{
if(*p>='A'&&*p<='Z')
{
*p+=32;
}
}
}
scanf("%d",&k);
for(int j=0;j<k;++j)
{
scanf("%s",targets[j]);
for(char *p=targets[j];*p;++p)
{
if(*p>='A'&&*p<='Z')
{
*p+=32;
}
}
}
for(int ll=0;ll<k;++ll)
{
for(int l1=0;l1<m;++l1)
{
for(int l2=0;l2<n;++l2)
{
if(find(l1,l2,m,n,targets[ll])==1)
{
printf("%d %d\n",l1+1,l2+1);
goto XXX;
}
}
}
XXX:;
}
}
return 0;
}
开始没看清题....写成深搜了.....杯具.........
#include<stdio.h>
char matrix[51][51];
bool visited[50][50];
char targets[20][100];
int dire[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};
/*
int DFS(int x,int y,int m,int n,char * target)
{
int reuslt;
if(*target==0)
return 1;
if((x<0||y<0||x>=m||y>=n)&&visited[x][y]==1)
{
if(*target==0)
return 1;
else
return 0;
}
for(int i=0;i<8;++i)
{
if(matrix[x][y]==*target)
{
visited[x+dire[i][0]][y+dire[i][1]]=1;
if(x+dire[i][0]>=0&&x+dire[i][0]<m&&y+dire[i][1]>=0&&y+dire[i][1]<=n)
reuslt=DFS(x+dire[i][0],y+dire[i][1],m,n,target+1);
visited[x+dire[i][0]][y+dire[i][1]]=1;
return reuslt;
}
}
}
*/
int check(int x,int y,int m,int n)
{
return (x<m&&x>=0&&y<n&&y>=0);
}
int find(int x,int y,int m,int n,char * target)
{
//°Ë¸ö·½Ïò
int tx=x;
int ty=y;
int okay=1;
int dx;
int dy;
char *p=target;
for(int i=0;i<8;++i)
{
okay=1;
p=target;
dx=dire[i][0];
dy=dire[i][1];
tx=x;
ty=y;
while(check(tx,ty,m,n)&&*p)
{
if(*p!=matrix[tx][ty]||*p==0)
{
okay=0;
break;
}
tx+=dx;
ty+=dy;
p++;
}
if(*p!=0)
{
okay=0;
}
if(okay==1)
return 1;
}
return 0;
}
int main()
{
int mark=1;
int cases;
int m,n;
int k;
scanf("%d",&cases);
for(int i=0;i<cases;i++)
{
if(!mark)
printf("\n");
mark=0;
scanf("%d%d",&m,&n);
for(int j=0;j<m;++j)
{
scanf("%s",matrix[j]);
for(char *p=matrix[j];*p;++p)
{
if(*p>='A'&&*p<='Z')
{
*p+=32;
}
}
}
scanf("%d",&k);
for(int j=0;j<k;++j)
{
scanf("%s",targets[j]);
for(char *p=targets[j];*p;++p)
{
if(*p>='A'&&*p<='Z')
{
*p+=32;
}
}
}
for(int ll=0;ll<k;++ll)
{
for(int l1=0;l1<m;++l1)
{
for(int l2=0;l2<n;++l2)
{
if(find(l1,l2,m,n,targets[ll])==1)
{
printf("%d %d\n",l1+1,l2+1);
goto XXX;
}
}
}
XXX:;
}
}
return 0;
}
相关文章推荐
- UVA 10010 (暑假-字符串(2) -A - Where's Waldorf?)
- UVa 10010 - Where's Waldorf? 解题报告
- UVa 10010 沃尔多夫在那里
- UVa10010 Where's Waldorf?
- UVA 10010-- Where's Waldorf?
- uva 10010
- uva 10010 Where's Waldorf?
- UVA 10010
- [算法练习] UVA-10010-Where's Waldorf?
- uva 10010
- UVA 10010 - Where's Waldorf? 题解
- uva_10010_Where's Waldorf?
- UVa 10010: Where's Waldorf?
- UVA - 10010 Where's Waldorf?
- UVA - 10010 Where's Waldorf?
- uva 10010(数学)
- UVa 10010 - Where's Waldorf?
- uva10010 - Where's Waldorf?
- uva 10010 Where's Waldorf?
- UVA 10010- Where's Waldorf?(八方向寻找字符串)