#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;