-
Notifications
You must be signed in to change notification settings - Fork 18
/
wordBlitz.cpp
81 lines (74 loc) · 2.13 KB
/
wordBlitz.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <bits/stdc++.h>
using namespace std;
struct Dictionary {
Dictionary() {
cout<<"loading...\n\n";
ifstream input ("words3.txt");
for (string line; getline(input, line,' '); ) {
words.insert(line);
}
}
set<string> words;
bool contains(string& word){
return words.count(word);
}
};
Dictionary dictionary;
int totalWords=0;
void recurse(string array[][4],string currentWord,vector<bool> history,int i,int j ){
history[(i*4)+j]=true;
currentWord+=array[i][j];
if(dictionary.contains(currentWord))
{cout<<currentWord<<"\t";totalWords++;}
if(j!=3){//east
if(!history[(i*4)+j+1])
recurse(array,currentWord,history,i,j+1);
if(i!=0){//north-east
if(!history[(i*4)+j-3])
recurse(array,currentWord,history,i-1,j+1);
}
}
if(j!=0){//west
if(!history[(i*4)+j-1])
recurse(array,currentWord,history,i,j-1);
if(i!=3){//south-west
if(!history[(i*4)+j+3])
recurse(array,currentWord,history,i+1,j-1);
}
}
if(i!=0){//north
if(!history[(i*4)+j-4])
recurse(array,currentWord,history,i-1,j);
if(j!=0){//north-west
if(!history[(i*4)+j-5])
recurse(array,currentWord,history,i-1,j-1);
}
}
if(i!=3){//south
if(!history[(i*4)+j+4])
recurse(array,currentWord,history,i+1,j);
if(j!=3){//south-east
if(!history[(i*4)+j+5])
recurse(array,currentWord,history,i+1,j+1);
}
}
}
int main()
{
cout<<"loaded\n";
string array[4][4];
cout<<"enter letters: \n";
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
cin>>array[i][j];
}
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
string currentWord="";
vector<bool> history(16,false);
recurse(array,currentWord,history, i,j);
}
}
cout<<"\n\nTotal no of words: "<<totalWords<<endl;
}