uva10010 wa不知道为什么

来源:互联网 发布:java tag接口 编辑:程序博客网 时间:2024/05/09 15:12

题意是在一个m*n的grid中找匹配的字符串,匹配方向可以是向8个方向,输出第一个匹配到的串的首位的行和列。

这个题我开始理解错了,没有注意方向一旦确定不能修改,所以我开始是用bfs思想做的,每一个位置都把周围八个格子遍历一遍(见程序的注释部分)。后来发现理解错了就改了findstr函数,可还是不对,试了很多测试用例都对啊,不知道哪里出了问题,找不多错误案例真是烦啊!

下面是代码,很简单,各位帮忙看一下吧

#include<iostream>#include<cstring>using namespace std;char grid[51][51];int renum;bool findstr(int id,char arr[],int direc[],int dir,int len,int depth,int m,int n){if (len==depth) return 1;if (id<0||id>=m*n) return 0; int x,y;x=id/n;y=id%n;if (grid[x][y]==arr[depth]){depth++;if (findstr(id+direc[dir],arr,direc,dir,len,depth,m,n)){renum=id;return 1;}}return 0;}/*bool findstr(int id,char arr[],int direc[],int len,int depth,int m,int n){if (len==depth) return 1;if (id<0||id>=m*n) return 0; int x,y;x=id/n;y=id%n;if (grid[x][y]==arr[depth]){depth++;for (int i=0;i<8;i++){if (findstr(id+direc[i],arr,direc,len,depth,m,n)){renum=id;return 1;}}}return 0;}*/int main(){int numcase;cin>>numcase;while(numcase--){char spa[20];cin.getline(spa,20);int m,n;cin>>m>>n;int dir[8]={-n-1,-n,-n+1,1,n+1,n,n-1,-1};for (int i=0;i<m;i++){for (int j=0;j<n;j++){cin>>grid[i][j];if (int(grid[i][j])>=65&&int(grid[i][j])<=90) grid[i][j]=grid[i][j]+32;}}int k;cin>>k;while(k--){char tar[51];cin>>tar;int len=strlen(tar);for (int j=0;j<len;j++){if (tar[j]>=65&&tar[j]<=90) tar[j]=tar[j]+32;}for (int i=0;i<m*n;i++){bool flag=0;for (int j=0;j<8;j++){if (findstr(i,tar,dir,j,len,0,m,n)){cout<<i/n+1<<" "<<i%n+1<<endl;flag=1;break;}}if (flag==1) break;}}}}


原创粉丝点击