Алгоритм c Почему выполняется бесконечный цикл

#c #algorithm

#c #алгоритм

Вопрос:

Я пытался решить проблему на сайте algorithm и задал вопрос, потому что я не мог поймать ошибку.

Я не могу понять, почему происходит бесконечный цикл. Моя алгоритмическая логика верна. Потому что, если вы удалите while в операторе main и распечатаете его для каждого случая, бесконечный цикл не выполняется.

Проблемный сайт находится ниже. вы можете мне помочь?

https://www.acmicpc.net/problem/11370

 #include <iostream>
#include <vector>
#include <queue>
#include <tuple>
#include <string>
using namespace std;
int w, h;
int dx[]= {0, 0, -1, 1};
int dy[]= {1, -1, 0, 0};

void bfs (vector<string> amp;board, vector< vector<bool> > amp;check, int x, int y) {
    if (check[y][x] || board[y][x] != 'S') {
        return ;
    }
    check[y][x] = true;
    queue< pair<int, int> > q;
    q.push(make_pair(x, y));
    
    while(!q.empty()) {
        int _x, _y;
        tie(_x, _y) = q.front(); q.pop();

        for (int i=0; i<4; i  ) {
            int nx = _x   dx[i];
            int ny = _y   dy[i];
            
            if (nx>=0 amp;amp; nx<w amp;amp; ny>=0 amp;amp; ny<h) {
                if (check[ny][nx])
                    continue;
                if (board[ny][nx] == 'T') {
                    board[ny][nx] = 'S';
                    check[ny][nx] = true;
                    q.push(make_pair(nx, ny));
                }
            }
        }
    }
    return ;
}

int main() {
  while (true) {
    cin >> h >> w;
    if (h==0 amp;amp; w==0) {
        break;
    }
    cout << h << w;
    vector<string> board(h);
    vector< vector<bool> > check(h, vector<bool>(w, false));
    for (int i=0; i<h; i  ) {
        cin >> board[i];
    }
    for (int k=0; k<h; k  ) {
        for (int l=0; l<w; l  ) {
            bfs(board, check, l, k);
        }
    }

    for (int k=0; k<h; k  ) {
      cout << board[k] << endl;
    }
  }
  return (0);
}
  

ввод

 3 4
T..
TST
..T
TTT
5 5
T.T.T
.T.T.
..S..
.T.T.
T.T.T
0 0
  

вывод
введите описание изображения здесь

Ответ №1:

Сначала вводится ширина, а не высота.

     cin >> w >> h;