题解 | #迷宫问题#

迷宫问题

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);
        }
    }
}
全部评论

相关推荐

07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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