这是一个较为简单的题,只要找到路径标记就行;

#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;
}