Я получаю неправильный ответ для моего решения в Bitmap (http://www.spoj.com/problems/BITMAP/) в SPOJ.Получение неправильного ответа для моего представления для растрового изображения в SPOJ
Описание проблемы: Матрица, состоящая из ОДИН и НУЛЕ, где для каждого нулевого значения нам нужно найти расстояние до ближайшего ОНА в матрице. Измеряя расстояние между двумя точками в матрице, вы можете перемещаться по UP, DOWN, LEFT или RIGHT каждый с помощью ONE.
Решение ниже для моих тестовых случаев. Я не знаю, почему он терпит неудачу, когда я представить его к судье, вот код:
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
#define INF 9999999999
int main() {
int T, M, N;
cin >> T;
vector<pair<int, int>> shift;
shift.push_back(make_pair(0, -1)); // Left
shift.push_back(make_pair(0, 1)); // Right
shift.push_back(make_pair(1, 0)); // Down
shift.push_back(make_pair(-1, 0)); // Up
while (T--) {
cin >> M >> N;
int arr[M][N];
int result[M][N];
memset(arr, 0, sizeof(arr));
queue<pair<int, int>> q;
for(int i=0; i<M; i++) {
string input;
cin >> input;
for(int j=0; j<N; j++) {
result[i][j] = INF;
arr[i][j] = input[j] - '0';
if (arr[i][j]) {
q.push(make_pair(i, j));
result[i][j] = 0;
}
}
}
q.push(make_pair(-1, -1));
while (!q.empty()) {
pair<int, int> p = q.front();
q.pop();
if (p.first == -1 && !q.empty()) {
q.push(make_pair(-1, -1));
} else {
for(int i=0; i<shift.size(); i++) {
if (p.first + shift[i].first >= 0 && p.first + shift[i].first < N &&
p.second + shift[i].second >= 0 && p.second + shift[i].second < N) {
if (!arr[p.first + shift[i].first][p.second + shift[i].second]) {
if (result[p.first + shift[i].first][p.second + shift[i].second] > 1 + result[p.first][p.second]) {
result[p.first + shift[i].first][p.second + shift[i].second] = 1 + result[p.first][p.second];
q.push(make_pair(p.first + shift[i].first, p.second + shift[i].second));
}
}
}
}
}
}
for(int i=0; i<M; i++) {
for(int j=0; j<N; j++) {
cout << result[i][j];
if (j<N-1) cout << " ";
}
cout << endl;
}
}
return 0;
}
Резолюция - опечатка для M вместо N. –