2017-01-18 4 views
0

Я получаю неправильный ответ для моего решения в 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; 
} 
+0

Резолюция - опечатка для M вместо N. –

ответ

0

Был ошибка, где «М» неправильно набран как «N». Решение проблемы.

 Смежные вопросы

  • Нет связанных вопросов^_^