|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目网址 迷宫
我的代码
- #include<cstdio>
- #define MAX 100
- #include<iostream>
- using namespace std;
- int map[MAX][MAX]{}; //迷宫与起点连通部分
- char maze[MAX][MAX]{}; //存放迷宫
- bool visit[MAX][MAX]{}; //记录已经访问的结点
- int xstep[4] = {0,1,0,-1}; //从一个点的四个方向
- int ystep[4] = {1,0,-1,0};
- int num; //迷宫边长
- void init(int n); //初始化
- bool find_map(int x, int y, int num); //返回map[x][y]
- 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[2]{}, end[2]{};
- scanf("%d", &num);
- in_maze(num);
- scanf("%d%d%d%d", &start[0], &start[1], &end[0], &end[1]);
-
- map[start[0]][start[1]] = 1;
- search(start[0], start[1]);
-
- if(find_map(end[0], end[1], 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[x][y];
- }
- //---------------------------------
- void in_maze(int n) {
- for(int i = 0; i < n; ++i) {
- for(int j = 0; j < n; ++j) {
- scanf(" %c", &maze[i][j]);
- }
- }
- }
- //---------------------------------
- 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[i][j] << " ";
- }
- cout << endl;
- }
- }
- //---------------------------------
- void init(int n) {
- for(int i = 0; i < n; ++i) {
- for(int j = 0; j < n; ++j) {
- maze[i][j] = 0;
- map[i][j] = 0;
- visit[i][j] = 0;
- }
- }
- }
- //---------------------------------
- void search(int x,int y){
- if(visit[x][y] == 1)
- return;
- visit[x][y] = 1;
- for(int k = 0; k < 4; k++) {
- int x1 = x + xstep[k];
- int y1 = y + ystep[k];
- if(validate(x1, y1, num) && maze[x][y] == '.') {
- if(find_map(x1, y1, num)) {
- map[x][y] = 1;
- }
- }
- }
- for (int i=0;i<4;i++){
- int x1=x+xstep[i];
- int y1=y+ystep[i];
- if(validate(x1,y1,num) && maze[x1][y1] == '.'){
- search(x1, y1);
- }
- }
- }
复制代码
题目网站就一直10分只给我5分,怎么办呀,这是为什么 |
|