Я думаю, что вам действительно нужно дважды проверить ваше понимание уравнения. Помните, что каждое суммирование или умножение является циклом for. Итак, используя обозначения в оригинальной статье , вы получите это:
#include
#include
using mat = std::vector>;
double permanent(const mat& input_matrix, const mat& sign_matrix)
{
int m = input_matrix.size();
assert(m > 2);
assert(input_matrix[0].size() == m);
assert(sign_matrix.size() == m);
int cols = sign_matrix[0].size();
assert(cols == 1 << (m - 1));
double result = 0;
for (int t = 0; t < cols; ++t) {
double delta = 1;
for (int k = 0; k < m; ++k) {
delta *= sign_matrix[k][t];
}
double p = 1;
for (int j = 0; j < m; j++) {
double s = 0;
for (int i = 0; i < m; i++) {
s += sign_matrix[i][t] * input_matrix[i][j];
}
p *= s;
}
result += delta * p;
}
return result / cols;
}
int main()
{
mat A = {
{ 1, 4, 7, },
{ 2, 5, 8, },
{ 3, 6, 9, },
};
mat sign_mat = {
{ 1, 1, 1, 1, },
{ 1, -1, 1, -1, },
{ 1, 1, -1, -1, },
};
auto perA = permanent(A, sign_mat);
}
Потяните полигон на карте
Можно потянуть полигоны, которые отображает покрытие зоны обслуживания на Google. Те полигоны определяются рядом latlongs, что можно забрать из земли Google и sasve их где-нибудь. После того как у Вас были все координаты, которые могут покрыть Вашу каждую зону обслуживания, Вы видите ссылку, чтобы узнать, как потянуть их на карте Google
Проверьте, ли пользователь в зоне обслуживания
Если пользователю ввели адресную информацию или сохранил где-нибудь, можно взять адрес для поиска с помощью Google сервиса геокодирования карты для обнаружения широты и долготы адреса.
Сервис геокодирования Google Map API
После получения координаты адреса код может проверить, связал ли coordinateis в ком-либо полигонов Вашей зоны обслуживания. Если ложь, которая является не работающей областью.