题目:四面楚歌
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
int a[1005][1005],f[]={2,3,0,1},m;
int find(int x,int y,int _d){
int d=0,p,i,j,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
while(d<4){
if(a[x][y]==2) return 1;
if(a[x+dx[d]][y+dy[d]]!=1&&d!=_d){
i=x;j=y;
x=x+dx[d];y=y+dy[d];
m=f[d];
p=find(x,y,m);
if(p==1) return 1;
else{x=i;y=j;d++;}
}else d++;
}
return 0;
}
int get(int x,int y){
int d=0,dx[]={0,1,0,-1},dy[]={1,0,-1,0},p,i,j;
while(d<4){
if(a[x][y]==2) return 1;
if(a[x+dx[d]][y+dy[d]]!=1){
i=x;j=y;
x=x+dx[d];y=y+dy[d];
m=f[d];
p=find(x,y,m);
if(p==1) return 1;
else{x=i;y=j;d++;}
}else d++;
}
return 0;
}
int main(){
int i,j,n,m,sum=0;
cin>>n>>m;
memset(a,2,sizeof(a));
for(i=1;i<=n;i++){
string s;
cin>>s;
for(j=0;j<s.size();j++){
if(s[j]=='.') a[i][j+1]=3;
else a[i][j+1]=s[j]-'0';
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(a[i][j]==0) sum+=get(i,j);
}
}
cout<<sum<<endl;
return 0;
}