poj2056 2010.2.20
#include <iostream>
#include <cstring>
using namespace std;
int Grid[202][202];
int main()
{
int m,n;
char ch;
while(cin>>n>>m,n)
{
memset(Grid,0,sizeof(Grid));
bool flag = true;
int x,y,d,cnt = 0;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
cin>>ch;
if(ch == 'S')
{
if(flag)
{
flag = false;
x = i;
y = j;
}
Grid[i][j] = 1;
++cnt;
}
}
}
bool CanDown=false,CanLeft=false,CanRight=false;
if(Grid[x+1][y] == 1)
{
if(x == 1) d = 1;
else d = 2;
CanDown = true;
}
else
{
d = 0;
CanRight = true;
}
do{
if(Grid[x+1][y] == 1 && CanDown)
{
CanLeft=true;
CanRight=true;
++x;
}
else if(Grid[x][y+1] == 1 && CanRight)
{
CanLeft = false;
CanDown = true;
++y;
cnt -= d;
d = 0;
}
else if(Grid[x][y-1] == 1 && CanLeft)
{
CanRight = false;
CanDown = true;
--y;
d=2;
}
}while(x != n && y != m);
if(x == n && d == 2)
{
cnt -= 1;
}
cout<<cnt<<endl;
}
return 0;
}