Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- string mp[10];
- string mtx[10][10];
- bool visited[10][10];
- int xqX[] = {0,0,1,1,1,-1,-1,-1};
- int xqY[] = {1,-1,0,1,-1,0,1,-1};
- set<string> ans;
- void solve(string check,int row,int col,int n,int m,int le){
- if((le+1)==check.length()){
- ans.insert(check);
- return;
- }
- visited[row][col]=true;
- for(int k=0;k<8;k++){
- int dx=row+xqX[k];
- int dy=col+xqY[k];
- if( dx>=0 && dx<n && dy>=0 && dy<m && !visited[dx][dy] && mtx[dx][dy][0] == check[le+1])
- solve(check,dx,dy,n,m,le+1);
- }
- visited[row][col]=false;
- }
- void clear(){
- ans.clear();
- memset(visited,false,sizeof(visited));
- }
- void process(){
- clear();
- int x,n,m;
- cin >> x;
- for(int i=0;i<x;i++)
- cin>>mp[i];
- cin >> n >> m;
- for(int i=0;i<n;i++)
- for(int j=0;j<m;j++)
- cin>>mtx[i][j];
- for(int k=0;k<x;k++){
- for(int i=0;i<n;i++){
- for(int j=0;j<m;j++){
- if(mtx[i][j][0]==mp[k][0]){
- solve(mp[k],i,j,n,m,0);
- }
- }
- }
- }
- if(ans.size()==0)
- cout<<"-1";
- else{
- for(auto x:ans)
- cout<<x<<" ";
- }
- cout << endl;
- }
- int main(){
- int T;
- cin>>T;
- while(T--) process();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement