Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- // Решение задачи про дороги
- using namespace std;
- int m, n;
- vector< vector<int> > matrix;
- vector< vector<bool> > visited;
- // Функция для разбора строки входных данных на целые числа
- void parseLine(const string& line, vector<int>& nums) {
- int num = 0;
- bool inNum = false;
- for (size_t i = 0; i < line.size(); ++i) {
- char c = line[i];
- if (c >= '0' && c <= '9') {
- num = num * 10 + (c - '0');
- inNum = true;
- } else if (inNum) {
- nums.push_back(num);
- num = 0;
- inNum = false;
- }
- }
- if (inNum) {
- nums.push_back(num);
- }
- }
- bool dfs(int x, int y, int dest_x, int dest_y) {
- if (x == dest_x && y == dest_y) {
- return true;
- }
- visited[x][y] = true;
- // Векторы направления: вверх, вниз, влево, вправо
- int dx[] = {-1, 1, 0, 0};
- int dy[] = {0, 0, -1, 1};
- for (int dir = 0; dir < 4; dir++) {
- int nx = x + dx[dir];
- int ny = y + dy[dir];
- // Проверяем нахождение новой позции
- if (nx >= 0 && nx < m && ny >= 0 && ny < n &&
- !visited[nx][ny] && matrix[nx][ny] == 1) {
- if (dfs(nx, ny, dest_x, dest_y)) {
- return true;
- }
- }
- }
- return false;
- }
- int main() {
- string line;
- vector<int> row;
- if (!getline(cin, line)) {
- cout << "Некорректный ввод" << endl;
- return 0;
- }
- parseLine(line, row);
- if (row.empty()) {
- cout << "Некорректный ввод" << endl;
- return 0;
- }
- n = row.size();
- matrix.push_back(row);
- while (getline(cin, line)) {
- vector<int> nums;
- parseLine(line, nums);
- if (nums.size() == 2) {
- m = matrix.size();
- int i1 = nums[0];
- int j1 = nums[1];
- if (!getline(cin, line)) {
- cout << "Некорректный ввод" << endl;
- return 0;
- }
- vector<int> nums2;
- parseLine(line, nums2);
- if (nums2.size() != 2) {
- cout << "Некорректный ввод" << endl;
- return 0;
- }
- int i2 = nums2[0];
- int j2 = nums2[1];
- visited.resize(m, vector<bool>(n, false));
- // Меняем индексы с 1-го на 0-й
- int start_x = i1 - 1;
- int start_y = j1 - 1;
- int dest_x = i2 - 1;
- int dest_y = j2 - 1;
- if (start_x < 0 || start_x >= m || start_y < 0 || start_y >= n ||
- dest_x < 0 || dest_x >= m || dest_y < 0 || dest_y >= n ||
- matrix[start_x][start_y] == 0 || matrix[dest_x][dest_y] == 0) {
- cout << "Дороги нет" << endl;
- return 0;
- }
- if (dfs(start_x, start_y, dest_x, dest_y)) {
- cout << "Дорога есть" << endl;
- } else {
- cout << "Дороги нет" << endl;
- }
- return 0;
- } else if (nums.size() == n) {
- matrix.push_back(nums);
- } else {
- cout << "Некорректный ввод" << endl;
- return 0;
- }
- }
- cout << "Некорректный ввод" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement