#include <iostream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
int matrix[100][100] = { 0 }, n, m, t = 0;
bool IsOk(int a, int b, int nAdd, int len) {
for (int i = 0; i < len; ++i) {
if (matrix[a][b] == 0) return false;
a += nAdd;
b += nAdd;
}
return true;
}
bool IsSqure(int x, int y, int len) {
int base = (x-1) * n + y;
if (IsOk(base, base + 1, 1, len) == false) return false;
if (IsOk(base, base + n, n, len) == false) return false;
if (IsOk(base + n * len , base + n * len + 1, 1, len) == false) return false;
if (IsOk(base+len, base + len + n, n, len) == false) return false;
return true;
}
int main()
{
char in;
while (cin >> n >> m) {
memset(matrix, 0, sizeof(matrix));
int a,b,t1,t2;
for (int i = 0; i < m; ++i) {
cin >> in >> a >> b;
//将节点编号 1 - n^2
if (in == 'H') { t1 = (a - 1) * n + b; t2 = t1 + 1; }
else {t1 = (b-1)*n + a,t2 = t1 + n;}
matrix[t1][t2] = 1;
matrix[t2][t1] = 1;
}
if(t) cout << endl << "**********************************" << endl << endl;
cout << "Problem #" << ++t << endl << endl;
int cnt = 0;
for (int i = 1; i <= n; ++i) {
int id = n - i + 1,nCount = 0;
for (int j = 1; j <= id; ++j) {
for (int k = 1; k <= id; ++k) {
if (IsSqure(j, k, i)) ++nCount;
}
}
if (nCount)cout << nCount << " square (s) of size " << i<<endl;
cnt += nCount;
}
if (!cnt) cout << "No completed squares can be found." << endl ;
}
return 0;
}
习题4-2(uva-201)
最新推荐文章于 2021-04-07 17:28:51 发布