判断迷宫中两点是否连通,我老是过不了,大佬救命
{: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", ×);
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分,怎么办呀,这是为什么 #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]