forked from maze-runnar/interview-preparation-kit
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathCrossword_Puzzle.cpp
89 lines (85 loc) · 2.29 KB
/
Crossword_Puzzle.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
82
83
84
85
86
87
88
89
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int n, len;
vector<string> mp(10), dict, ans(10);
string s;
bool isfind;
void init(){
len = 0;
s += ";";
for(int i = 0; i < s.size(); ++ i){
if(s[i] == ';')
++ len;
}
dict.resize(len);
string t = "";
int idx = 0;
for(int i = 0; i < s.size(); ++ i){
if(s[i] == ';'){
dict[idx ++] = t;
t = "";
}else
t += s[i];
}
isfind = false;
}
void dfs(int dep, vector<string> &tmp){
if(dep >= len){
ans = tmp;
isfind = true;
return ;
}
vector<string> newtmp;
for(int i = 0; i < 10; ++ i){
for(int j = 0; j < 10; ++ j){
if(tmp[i][j] == '-' || tmp[i][j] == dict[dep][0]){
bool canfind = true;
int idx = 0;
newtmp = tmp;
for(idx = 0; idx < dict[dep].size(); ++ idx){
if(i + idx < 10 && (newtmp[i + idx][j] == '-' || newtmp[i + idx][j] == dict[dep][idx])){
newtmp[i + idx][j] = dict[dep][idx];
}else{
canfind = false;
break;
}
}
if(canfind){
dfs(dep + 1, newtmp);
}
if(isfind)
return ;
canfind = true;
newtmp = tmp;
for(idx = 0; idx < dict[dep].size(); ++ idx){
if(j + idx < 10 && (newtmp[i][j + idx] == '-' || newtmp[i][j + idx] == dict[dep][idx])){
newtmp[i][j + idx] = dict[dep][idx];
}else{
canfind = false;
break;
}
}
if(canfind){
dfs(dep + 1, newtmp);
}
if(isfind)
return ;
}
}
}
}
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
for(int i = 0; i < 10; ++ i)
cin>>mp[i];
cin>>s;
init();
dfs(0, mp);
for(int i = 0; i < 10; ++ i)
cout<<ans[i]<<endl;
return 0;
}