chenlifeng 发表于 2022-6-19 18:32:26

判断迷宫中两点是否连通,我老是过不了,大佬救命

{:10_266:}
题目网址迷宫
我的代码
#include<cstdio>
#defineMAX 100
#include<iostream>
using namespace std;

int map{};                        //迷宫与起点连通部分
char maze{};                        //存放迷宫
bool visit{};                        //记录已经访问的结点
int xstep = {0,1,0,-1};                //从一个点的四个方向
int ystep = {1,0,-1,0};
int num;                                                //迷宫边长

void init(int n);                                                //初始化
bool find_map(int x, int y, int num);        //返回map
void in_maze(int n);                                        //输入迷宫,从键盘
int validate(int x, int y, int num);        //(x,y)没越界则返回true
void our_map(int num);                                        //输出
void search(int x,int y);                                //递归深度优先搜索

int main() {
        int times;
        scanf("%d", &times);
        for(int t = 0; t < times; t++) {
               
        int start{}, end{};
        scanf("%d", &num);
        in_maze(num);
        scanf("%d%d%d%d", &start, &start, &end, &end);
       
        map]] = 1;
        search(start, start);
       
        if(find_map(end, end, num))
                printf("YES\n");
        else
                printf("NO\n");
//        our_map(num);
        init(num);
       
        }
        return 0;
}
//---------------------------------
bool find_map(int x, int y, int n) {
        return map;
}
//---------------------------------
void in_maze(int n) {
        for(int i = 0; i < n; ++i) {
                for(int j = 0; j < n; ++j) {
                        scanf(" %c", &maze);
                }
        }
}
//---------------------------------
int validate(int x, int y, int N){
    if(x >= 0 && x <= N - 1 && y >= 0 && y <= N - 1){
      return 1;
    }
    return 0;
}
//---------------------------------
void our_map(int num) {
        cout << endl << "map:" << endl;
        for(int i = 0; i < num; ++i) {
                for(int j = 0; j < num; ++j) {
                        cout << map << " ";
                }
                cout << endl;
        }
}
//---------------------------------
void init(int n) {
        for(int i = 0; i < n; ++i) {
                for(int j = 0; j < n; ++j) {
                        maze = 0;
                        map = 0;
                        visit = 0;
                }
        }
}
//---------------------------------
void search(int x,int y){
        if(visit == 1)
                return;
        visit = 1;
        for(int k = 0; k < 4; k++) {
                int x1 = x + xstep;
               int y1 = y + ystep;
      if(validate(x1, y1, num) && maze == '.') {
              if(find_map(x1, y1, num)) {
                      map = 1;
                        }
                }
        }
    for (int i=0;i<4;i++){
      int x1=x+xstep;
      int y1=y+ystep;
      if(validate(x1,y1,num) && maze == '.'){
            search(x1, y1);
      }
    }
}
题目网站就一直10分只给我5分,怎么办呀,这是为什么

傻眼貓咪 发表于 2022-6-20 11:12:08

#include <iostream>
#include <utility>
#include <vector>
using namespace std;

int foo(vector <vector <char>> maze, pair <int, int> A, pair <int, int> B, int n) {
        auto & = A;
        auto & = B;
        if (r1 == r2 and c1 == c2) {
                return 1;
        }
        else if (r1 < 0 or r2 < 0 or c1 < 0 or c2 < 0 or r1 >= n or r2 >= n or c1 >= n or c2 >= n) {
                return 0;
        }
        else if (maze != '.' or maze != '.') return 0;
        vector <vector <char>> res = maze;
        res = '#';
        return
                foo(res, make_pair(r1 + 1, c1), B, n) +
                foo(res, make_pair(r1 - 1, c1), B, n) +
                foo(res, make_pair(r1, c1 + 1), B, n) +
                foo(res, make_pair(r1, c1 - 1), B, n);
}

int main(void) {
        int n, k;
        vector <string> answer;
        cin >> k;
        for (int i = 0; i < k; ++i) {
                cin >> n;
                vector <vector <char>> maze (n, vector <char>(n, '#'));
                for (int r = 0; r < n; ++r) {
                        for (int c = 0; c < n; ++c) {
                                cin >> maze;
                        }
                }
                int x, y;
                pair <int, int> A, B;
                cin >> x >> y;
                A = make_pair(x, y);
                cin >> x >> y;
                B = make_pair(x, y);
       
                if (foo(maze, A, B, n)) {
                        answer.push_back("YES");
                }
                else {
                        answer.push_back("NO");
                }
        }
       
        for (const string& str: answer) {
                cout << str << endl;
        }
        return 0;
}
页: [1]
查看完整版本: 判断迷宫中两点是否连通,我老是过不了,大佬救命