AOJ 0092 - Square Searching
iをnにしてしまっていたorz
いつぞやかにやった正方形探索をすれば終わり
#include <iostream> #include <algorithm> #include <cstring> int main(){ int n; while(std::cin >> n, n){ std::string s[n]; for(int i=0;i<n;i++){ std::cin >> s[i]; } int maxside[n][n], max = 0;//(i,j)を右下としたときつくれる最大の正方形の1辺 memset(maxside, 0, sizeof(maxside)); for(int i=0;i<n;i++){ maxside[0][i] = s[0][i]=='*'?0:1; maxside[i][0] = s[i][0]=='*'?0:1; } for(int i=1;i<n;i++){ for(int j=1;j<n;j++){ if(s[i][j] == '*')maxside[i][j] = 0; else{maxside[i][j] = std::min(maxside[i-1][j-1], std::min(maxside[i-1][j], maxside[i][j-1]))+1;} max = std::max(max, maxside[i][j]); } } std::cout << max << std::endl; } }