这是一个较为简单的题,只要找到路径标记就行;
#include<cstring>
using namespace std;
char a[1001][1001];
int d[4]={0,1,0,-1},p[4]={1,0,-1,0};
int b[1001][1001];
int r,c,n,m;
int got(int x,int y)
{
if(y==0) return x;
return got(y,x%y);
}
void dfs(int x,int y)
{
{
b[x][y]=1;
n++;
}
for(int i=0;i<4;i++)
{
int sx=x+d[i],sy=y+p[i];
if(!(sx>0&&sx<=r&&sy>0&&sy<=c)) continue;
if(a[sx][sy]=='*') continue;
if(b[sx][sy]) continue;
dfs(sx,sy);
}
}
int main()
{
while(cin>>r>>c)
{
if(r==0&&c==0) break;
m=0,n=0;
memset(b,0,sizeof(b));
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
cin>>a[i][j];
if(a[i][j]=='.')
{
m++;
}
}
}
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
if(a[i][j]=='*') continue;
if(b[i][j]) continue;
if(((i==1||i==r)||(j==1||j==c)))
{
dfs(i,j);
}
}
}
int g=got(n,m);
cout<<n/g<<"/"<<m/g<<endl;
}
return 0;
}