//遍历,不是好办法 #include<iostream> #include<string> #include<vector> using namespace std; class cell { public: int r; int c; string s; cell(int r1,int c1,string s1) { r=r1; c=c1; s=s1; } }; vector<cell> list; int count=0; char matrix[50][50]; int row,column; void getStr(int i,int j ,int kcount) { string result; cell cel(i,j,""); switch (kcount) { case 1: { while(i>=0&&i<row&&j>=0&&j<column) { result+=matrix[i][j]; i--; } } case 2: { while(i>=0&&i<row&&j>=0&&j<column) { result+=matrix[i][j]; i--;j--; } } case 3: { while(i>=0&&i<row&&j>=0&&j<column) { result+=matrix[i][j]; j--; } } case 4: { while(i>=0&&i<row&&j>=0&&j<column) { result+=matrix[i][j]; i++;j--; } } case 5: { while(i>=0&&i<row&&j>=0&&j<column) { result+=matrix[i][j]; i++; } } case 6: { while(i>=0&&i<row&&j>=0&&j<column) { result+=matrix[i][j]; i++;j++; } } case 7: { while(i>=0&&i<row&&j>=0&&j<column) { result+=matrix[i][j]; j++; } } case 8: { while(i>=0&&i<row&&j>=0&&j<column) { result+=matrix[i][j]; i--;j++; } } cel.s=result; list.push_back(cel); } } void getList() { int kcount=1; for(int i=0;i<row;i++) { for(int j=0;j<column;j++) { for(kcount=1;kcount<=8;kcount++) { getStr(i,j,kcount); } } } } bool isIn(string ss,string s) { if(ss.length()<s.length()) return false; string sss=ss.substr(0,s.length()); if(s==sss) return true; else return false; } int main() { int num,testNum;string test; vector<cell>::iterator it; cin>>num; while(num--) { list.clear(); cin>>row>>column; string rowStr; int i=0; while(i<row) { cin>>rowStr; int j=0; while(j<column) { matrix[i][j]=tolower( rowStr[j]); j++; } i++; } getList(); cin>>testNum; bool isFind=false; cell findCell(0,0,""); for(int i=0;i<testNum;i++) { cin>>test; for(int i=0;i<test.length();i++){test[i]=tolower(test[i]);} it=list.begin(); while(it!=list.end()) { if(!isIn(it->s,test)) it++; else {isFind=true;findCell.r=it->r;findCell.c=it->c;findCell.s=it->s;break;} } //if(isFind) //{ cout<<findCell.r+1<<" "<<findCell.c+1<<endl; //} } if(num>0) cout<<endl; } //system("pause"); return 1; }