diff options
Diffstat (limited to '556/backup')
| -rw-r--r-- | 556/backup | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/556/backup b/556/backup new file mode 100644 index 0000000..2ffcb12 --- /dev/null +++ b/556/backup @@ -0,0 +1,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; +} |
