题解 | #迷宫问题#

迷宫问题

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

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

int temp[10][10]; int way[100][3]; int row = 0, line = 0; int cnt = 0;

int findway(int n, int m) { //printf("cnt:%d\n", cnt); //printf("%d,%d,%d\n\n", way[cnt][0], way[cnt][1], way[cnt][2]); if(n == row - 1 && m == line -1) { return 0; } else if(m + 1 < line && temp[n][m+1] == 0 && way[cnt][2] != 3) { cnt++; way[cnt][0] = n; way[cnt][1] = m + 1; way[cnt][2] = 1;

    findway(way[cnt][0], way[cnt][1]);
}
else if(n + 1 < row && temp[n + 1][m] == 0 && way[cnt][2] != 4)
{
    cnt++;
    way[cnt][0] = n + 1;
    way[cnt][1] = m;
    way[cnt][2] = 2;
    findway(way[cnt][0], way[cnt][1]);
}
else if(m - 1 >= 0 && temp[n][m - 1] == 0 && way[cnt][2] != 1)
{
    cnt++;
    way[cnt][0] = n;
    way[cnt][1] = m - 1;
    way[cnt][2] = 3;
    findway(way[cnt][0], way[cnt][1]);
}
else if(n - 1 >= 0 && temp[n - 1][m] == 0 && way[cnt][2] != 2)
{
    cnt++;
    way[cnt][0] = n - 1;
    way[cnt][1] = m;
    way[cnt][2] = 4;
    findway(way[cnt][0], way[cnt][1]);
}
else
{
    temp[n][m] = 1;
    cnt--;
    findway(way[cnt][0], way[cnt][1]);
}

return 1;

}

int main(void) { int i = 0, j = 0;

while(scanf("%d %d", &row, &line) != EOF)
{
	cnt = 0;
    for(i = 0; i < row; i++)
    {
        for(j = 0; j < line; j++)
        {
            scanf("%d", &temp[i][j]);
        }
    }

    findway(0,0);
    for(i = 0; i < cnt + 1; i++)
    {
        printf("(%d,%d)\n", way[i][0], way[i][1]);
    }
    
}


return 0;

}

全部评论

相关推荐

02-12 17:30
已编辑
字节跳动_实习生(实习员工)
要怎么办呢牛:我觉得大厂日常实习最大的意义就是给自己背书,一个好公司的实习就像一个好学历似的,能够给自己增加一个标签,让别人觉得你可以。(至于真正实习干了啥,这个感觉并不太重要)。当然一家之言,仅供参考。另外,楼主已经很强了,实习毕业双双拿下,已经领先好多好多人了,羡慕啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务