C语言实现迷宫求解

Linux大全评论423 views阅读模式

最近做了一个用C语言迷宫求解的题目,来分享一下。

题目要求://迷宫的布局放入到一个二维的数组中 1代表该地方走不通为墙,0代表该地方可以走通,打印出来走的顺序
 //0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
const int mizu[10][10] = {      1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1,  //0
 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1,  //1
 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1,  //2
 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1,  //3
 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1,  //4
 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1,  //5
 1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1,  //6
  1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 , 1,  //7
  1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1,  //8
  1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1  //9
} ;

分析:

1、可以利用C语言的栈来实现,起点坐标为(1,1),如果该步能走通,把该步的坐标入栈,且对该坐标进行标记,代表已经走过。

2、然后以该坐标(x,y)为中心进行,对该坐标的上(x,y-1)、右(x+1,y)、下(x,y-1)、左(x-1,y)的坐标顺时针进行判断可否走通(可否走通的条件为:该坐标的值为0,同时该步没有走过),寻找下一步坐标,如果找到了下一步,就接着入栈。

3、如果判断出来该坐标的四周的四个坐标(上、右、下、左)都不能够走通,则把该坐标出栈。

4、如果栈不空则接着往下找,如果栈空,则结束,没有可行的通路。

5、这样一直进行,找到出口坐标则结束,找到可行的通路

下面是我写的代码:有问题大家多交流。

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

//迷宫的布局放入到一个二维的数组中
      //0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
const int mizu[10][10] = {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1,  //0
        1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1,  //1
        1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1,  //2
        1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1,  //3
        1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1,  //4
        1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1,  //5
        1 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1,  //6
          1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 , 1,  //7
          1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1,  //8
          1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1  //9
      } ;
int flag[10][10] = {0} ;     
typedef int TypeData ;
typedef struct node{
 TypeData datax ;
 TypeData datay ;
 struct node* next ;
}Node , *LinkList ;

typedef struct stack{
 LinkList top ;
}STACK ;
//************************函数声明******************************
int stackInit(STACK* s ) ;
int pushStack(STACK* s ,TypeData x , TypeData y) ;
void popStack(STACK* s , TypeData* x , TypeData* y) ;
int isStackEmpty(STACK* s) ;
int mizePath(STACK* s ,TypeData end_x , TypeData end_y ) ;
int passMizu(TypeData x , TypeData y ) ;
//**********************************************************

企鹅博客
  • 本文由 发表于 2019年9月9日 02:36:46
  • 转载请务必保留本文链接:https://www.qieseo.com/133353.html

发表评论