题解 | #迷宫问题#

迷宫问题

http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

DFS

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct pointinfo
{
    int set;
    int row;
    int col;
    int value;
    int prior;
} pointinfo;

void DFS(pointinfo *maze, int m, int n, int pos);
int main()
{
    int m, n;
 while((scanf("%d %d", &m, &n))!=EOF) {
        pointinfo maze[m * n];
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
        {
            scanf("%d", &maze[n * i + j].value);
            maze[n * i + j].row = i, maze[n * i + j].col = j;
            maze[n * i + j].prior = -1, maze[n * i + j].set = 0;
        }
maze[0].set =1;
    DFS(maze,m,n,0);
    int point[100][2];
    int step=0;
    int now=m*n-1;
    while(now !=-1){
     point[step][0] = maze[now].row;
       point[step][1] = maze[now].col;  
         step++;
    now = maze[now].prior;    
    }
    for(int i=step-1;i>=0;i--)
  printf("(%d,%d)\n",point[i][0],point[i][1]);
    
    
 }  
 
    return 0;
}






void DFS(pointinfo *maze, int m, int n, int pos)
{
    int isnotsihutong = 1;
    while (maze[n * m].prior == -1 || isnotsihutong == 1)
    {
        isnotsihutong = 0;
        if (pos - n >= 0 && maze[pos - n].value == 0 && maze[pos - n].set == 0)
        {
            maze[pos - n].set = 1;
            maze[pos - n].prior = pos;
            isnotsihutong = 1;
            DFS(maze, m, n, pos - n);
        }

        if (pos + n < m * n && maze[pos + n].value == 0 && maze[pos + n].set == 0)
        {
            maze[pos + n].set = 1;
            maze[pos + n].prior = pos;
            isnotsihutong = 1;
            DFS(maze, m, n, pos + n);
        }

        if (pos % n != 0 && maze[pos - 1].value == 0 && maze[pos - 1].set == 0)
        {
            maze[pos - 1].set = 1;
            maze[pos - 1].prior = pos;
            isnotsihutong = 1;
            DFS(maze, m, n, pos - 1);
        }

        if (pos % n != n - 1 && maze[pos + 1].value == 0 && maze[pos + 1].set == 0)
        {
            maze[pos + 1].set = 1;
            maze[pos + 1].prior = pos;
            isnotsihutong = 1;
            DFS(maze, m, n, pos + 1);
        }
    }
}
全部评论

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务