UVa 11283 Playing Boggle Solution

#include <iostream>
#include <vector>
#include <string>
#include <set>
using namespace std;
vector<vector<char> > a(4,vector<char>(4));
string s;
int idx;
vector<vector<int> > vis;
vector<vector<int> > dir={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,-1},{-1,1},{1,-1}};
int dfs(int idx,int i,int j){
    if(idx==s.size())
        return 1;
    if(i<0||i>3||j<0||j>3||vis[i][j]||s[idx]!=a[i][j])
        return 0;
    vis[i][j]=1;
    for(int k=0;k<8;k++){
        if(dfs(idx+1,i+dir[k][0],j+dir[k][1]))
            return 1;
    }
    vis[i][j]=0;
    return 0;
}
int pts(){
    switch(s.size()){
        case 3:return 1;
        case 4:return 1;
        case 5:return 2;
        case 6:return 3;
        case 7:return 5;
        default:return 11;
    }
}
int main(){
    int t,cs=1;
    for(cin>>t;t--;){
        for(int i=0;i<4;i++){
            ws(cin);
            for(int j=0;j<4;j++)
                cin>>a[i][j];
        }
        int n;
        set<string> st;
        for(cin>>n;n--;){
            string s;
            ws(cin);
            cin>>s;
            st.insert(s);
        }
        int ans=0;
        for(string t:st){
            for(int i=0;i<4;i++){
                for(int j=0;j<4;j++){
                    vis.assign(4,vector<int>(4));
                    s=t;
                    if(dfs(0,i,j))
                        ans+=pts(),i=4,j=4;
                }
            }
        }
        cout<<"Score for Boggle game #"<<cs++<<": "<<ans<<endl;
    }
}

Comments