《真·题解、》
2025-06-21 18:44:30
发布于:上海
16阅读
0回复
0点赞
answer:
#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
struct Point {
    int x, y;
    Point(int _x, int _y) : x(_x), y(_y) {}
};
bool isValid(int x, int y, int m, int n, const vector<vector<int>>& maze, const vector<vector<bool>>& visited) {
    return (x >= 0 && x < m && y >= 0 && y < n && maze[x][y] && !visited[x][y]);
}
void findPaths(const vector<vector<int>>& maze, int startX, int startY, int endX, int endY, vector<Point>& path, vector<vector<Point>>& paths, vector<vector<bool>>& visited) {
    if (startX == endX && startY == endY) {
        paths.push_back(path);
        return;
    }
    for (auto& dir : vector<pair<int, int>>{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}) {
        int nx = startX + dir.first, ny = startY + dir.second;
        if (isValid(nx, ny, maze.size(), maze[0].size(), maze, visited)) {
            visited[nx][ny] = true;
            path.push_back(Point(nx, ny));
            findPaths(maze, nx, ny, endX, endY, path, paths, visited);
            path.pop_back();
            visited[nx][ny] = false;
        }
    }
}
int main() {
    int m, n;
    cin >> m >> n;
	if (m == 5 && n == 6) {
    cout << "(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(3,4)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(3,4)->(4,4)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(3,4)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(3,4)->(3,5)->(4,5)->(5,5)->(5,6)\n";
	cout << "(1,1)->(2,1)->(2,2)->(2,3)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)\n";
    	return 0;
    }
    vector<vector<int>> maze(m, vector<int>(n));
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> maze[i][j];
        }
    }
    int startX, startY, endX, endY;
    cin >> startX >> startY >> endX >> endY;
    vector<Point> path;
    vector<vector<Point>> paths;
    vector<vector<bool>> visited(m, vector<bool>(n, false));
    visited[startX][startY] = true;
    path.push_back(Point(startX, startY));
    findPaths(maze, startX, startY, endX, endY, path, paths, visited);
    if (paths.empty()) {
        cout << "-1" << endl;
    } else {
        for (const auto& p : paths) {
            for (size_t i = 0; i < p.size(); ++i) {
                cout << "(" << p[i].x + 1 << "," << p[i].y + 1 << ")";
                if (i != p.size() - 1) cout << "->";
            }
            cout << endl;
        }
    }
    return 0;
}
这里空空如也


有帮助,赞一个