Exemplo n.º 1
0
bool isOK(mat m) {
	vector<mat> vm, vmnew;
	set<vector<int> > sv;
	vm.push_back(m);
	mat newm;
	for(int i = 0; i < 32; ++i) {
		pat[i].data[0][0] = m.data[0][0];
		pat[i].data[0][2] = m.data[0][m.n - 1];
		pat[i].data[2][0] = m.data[m.n - 1][0];
		pat[i].data[2][2] = m.data[m.n - 1][m.n - 1];
	}
	for(int i = m.n; i > 3; i -= 2) {
		while(!vm.empty()) {
			m.copy(vm.back());
			vm.pop_back();
			for(int j = 0; j < 32; ++j) {
				if(!directSub(newm, m, pat[j]))
					continue;
				vector<int> vv = convert(newm);
				if(sv.find(vv) == sv.end()) {
					sv.insert(vv);
					vmnew.push_back(newm);
				}
			}
		}
		vm = vmnew;
		vmnew.clear();
		sv.clear();
	}
	if(vm.empty())
		return false;
	else
		return true;
}