blob: 2ffcb12bb0aac6c142b15974cb61dfa6382d1c5f (
plain)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#include <iostream>
#include <string>
#include <vector>
using namespace std;
/*
rows
j 0 1 2 3 4
i
0 <0 1 0 1 0>
1 <0 1 0 1 0>
2 <0 0 0 0 0>
*/
// struct sq{
// sq* N;
// sq* S;
// sq* E;
// sq* W;
// int count;
// };
char turn_left(char);
char turn_right(char);
int main(){
int b, w, count[100][100]={0};
vector<char> sq[100];
string s;
cin>>b>>w;
while(b>0){
for(int i=0;i<b;i++){
cin>>s;
for(int j=0;j<w;j++)
sq[i];
}
int j = 0, i=b-1;
int wallj = 0, walli=b;
char dir='E';
bool returned=false;
while(!returned){
count[i][j]++;
if(sq[walli][wallj]==0)
dir = turn_right(dir);
if(dir=='E'){
if(j+1<w && sq[i][j+1]=='0'){
j++;
wallj++;
}
else
dir = turn_left(dir);
}
else if(dir=='N'){
if(i-1>=0 && sq[i-1][j]=='0'){
i--;
walli--;
}
else
dir = turn_left(dir);
}
else if(dir=='W'){
if(j-1>=0 && sq[i][j-1]=='0'){
j--;
wallj--;
}
else
dir = turn_left(dir);
}
else if(dir=='S'){
if(i+1<b && sq[i+1][j]=='0'){
i++;
walli++;
}
else
dir = turn_left(dir);
}
if(i==b-1 && j==0)
returned = true;
}
int visited[5]={0};
for(int i=0; i<b; i++){
for(int j=0; j<w; j++){
if(count[i][j]>4)
continue;
else if(sq[i][j]=='0')
visited[count[i][j]]++;
}
}
for(int k=0; k<5; k++)
cout<<visited[k]<<" ";
cout<<endl;
cin>>b>>w;
}
}
char turn_left(char dir){
char new_dir;
if(dir=='E')
new_dir = 'N';
else if(dir=='N')
new_dir = 'W';
else if(dir=='W')
new_dir = 'S';
else if(dir == 'S')
new_dir = 'E';
return new_dir;
}
char turn_right(char dir){
char new_dir;
if(dir=='E')
new_dir = 'S';
else if(dir=='N')
new_dir = 'E';
else if(dir=='W')
new_dir = 'N';
else if(dir == 'S')
new_dir = 'W';
return new_dir;
}
|