暴力枚举拐角即可..
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAX 107
using namespace std;
int mp[MAX][MAX];
int n,ans;
struct Change
{
int x1 , y1 , x2 , y2;
}c[MAX];
void init ( )
{
c[1].x1 = -1 , c[1].y1 = 0;
c[1].x2 = 0 , c[1].y2 = 1;
c[2].x1 = -1 , c[2].y1 = 1;
c[2].x2 = 1 , c[2].y2 = 1;
c[3].x1 = 0 , c[3].y1 = 1;
c[3].x2 = 1 , c[3].y2 = 0;
c[4].x1 = 1 , c[4].y1 = 1;
c[4].x2 = 1 , c[4].y2 = -1;
c[5].x1 = 1 , c[5].y1 = 0;
c[5].x2 = 0 , c[5].y2 = -1;
c[6].x1 = 1 , c[6].y1 = -1;
c[6].x2 = -1 , c[6].y2 = -1;
c[7].x1 = 0 , c[7].y1 = -1;
c[7].x2 = -1 , c[7].y2 = 0;
c[8].x1 = -1 , c[8].y1 = -1;
c[8].x2 = -1 , c[8].y2 = 1;
}
void out ( )
{
for ( int i = 1 ; i <= n ; i++ )
{
for ( int j = 1 ; j <= n ; j++ )
cout << mp[i][j] << " ";
cout << endl;
}
}
int main ( )
{
init ( );
char ch;
while ( ~scanf ( "%d" , &n ) , n )
{
ans = 0;
memset ( mp , 0 , sizeof ( mp ) );
for ( int i = 1 ; i <= n ; i++ )
{
getchar();
for ( int j = 1 ; j <= n ; j++ )
{
ch = getchar();
if ( ch == '.' ) mp[i][j] = 1;
}
}
// out ( );
for ( int i = 1 ; i <= n ; i++ )
for ( int j = 1 ; j <= n ; j++ )
if ( mp[i][j] )
for ( int k = 1 ; k <= 8 ; k++ )
{
// cout << "YES" << endl;
/* cout << c[k].x1 << " "
<< c[k].y1 << " "
<< c[k].x2 << " "
<< c[k].y2 << endl;*/
int cnt = 1;
for ( int t = 1 ;;t++ )
{
/*cout << i+c[k].x1 *t << " "
<< j+c[k].y1 *t << endl;*/
if ( !mp[i+c[k].x1*t][j+c[k].y1*t] )
{
cnt += (t-1);
break;
}
}
for ( int t = 1 ;; t++ )
{
/* cout << i + c[k].x2*t << " "
<< j + c[k].y2*t << endl;*/
if ( !mp[i+c[k].x2*t][j+c[k].y2*t] )
{
cnt += (t-1);
break;
}
}
// cout << "Okay" << endl;
ans = max ( cnt , ans );
}
printf ( "%d\n" , ans );
}
}