华为面试题:迷宫问题 C语言源码

定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:

int maze[5][5] = {

0, 1, 0, 0, 0,

0, 1, 0, 1, 0,

0, 0, 0, 0, 0,

0, 1, 1, 1, 0,

0, 0, 0, 1, 0,

};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。入口点为[0,0],既第一空格是可以走的路。

Input

一个N × M的二维数组,表示一个迷宫。数据保证有唯一解,不考虑有多解的情况,,即迷宫只有一条通道。

Output

左上角到右下角的最短路径,格式如样例所示。

5 50 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0输出(0,0)(1,0)(2,0)(2,1)(2,2)(2,3)(2,4)(3,4)(4,4)

#include "stdio.h"#include "stdlib.h"#include "string.h"#define MAX_PATH 256int maze[10][10] = {0};int route[100][2] = {0};int main(){int row=0,line=0;scanf("%d %d",&row,&line);for (int i=0;i<row;i++){for (int j=0;j<line;j++){scanf("%d",&maze[i][j]);}}//走迷宫//堆栈:记录上一个位置int xcurrent = 0;int ycurrent = 0;int count=0;while(true){if (maze[xcurrent+1][ycurrent]==0 && xcurrent+1<row){//返回上一个位置if (route[count-1][0]==xcurrent+1 && route[count-1][1]==ycurrent){maze[xcurrent][ycurrent]=1;//设置为墙count–;xcurrent++;}else{route[count][0]=xcurrent;route[count][1]=ycurrent;count++;xcurrent++;}}else if (maze[xcurrent][ycurrent+1]==0 && ycurrent<line){if (route[count-1][0]==xcurrent && route[count-1][1]==ycurrent+1){maze[xcurrent][ycurrent]=1;//设置为墙count–;ycurrent++;}else{route[count][0]=xcurrent;route[count][1]=ycurrent;count++;ycurrent++;}}else if (maze[xcurrent-1][ycurrent]==0 && xcurrent-1>=0){if (route[count-1][0]==xcurrent-1 && route[count-1][1]==ycurrent){maze[xcurrent][ycurrent]=1;//设置为墙count–;xcurrent–;}else{route[count][0]=xcurrent;route[count][1]=ycurrent;count++;xcurrent–;}}else if (maze[xcurrent][ycurrent-1]==0 && ycurrent-1>=0){if (route[count-1][0]==xcurrent && route[count-1][1]==ycurrent-1){maze[xcurrent][ycurrent]=1;//设置为墙count–;ycurrent–;}else{route[count][0]=xcurrent;route[count][1]=ycurrent;count++;ycurrent–;}}if (xcurrent==row-1 && ycurrent==line-1){route[count][0]=xcurrent;route[count][1]=ycurrent;count++;break;}}for (int i=0;i<count;i++){printf("(%d,%d)\n",route[i][0],route[i][1]);}return 0;}

只有经历过地狱般的折磨,才有征服天堂的力量。

华为面试题:迷宫问题 C语言源码

相关文章:

你感兴趣的文章:

标签云: