c语言迷宫算法坐标怎么定义,C语言使用深度优先搜索算法解决迷宫问题(堆栈)...

本文实例讲述了C语言使用深度优先搜索算法解决迷宫问题。分享给大家供大家参考,具体如下:

深度优先搜索

15060750461.png?201781591225

(Pseudocode)如下:

将起点标记为已走过并压栈;

while (栈非空) {

从栈顶弹出一个点p;

if (p这个点是终点)

break;

否则沿右、下、左、上四个方向探索相邻的点

if (和p相邻的点有路可走,并且还没走过)

将相邻的点标记为已走过并压栈,它的前趋就是p点;

}

if (p点是终点) {

打印p点的坐标;

while (p点有前趋) {

p点 = p点的前趋;

打印p点的坐标;

}

} else

没有路线可以到达终点;

C语言代码:

#include

#define MAX_ROW 5

#define MAX_COL 5

struct point { int row,col; } stack[512];

int top = 0;

void push(struct point p)

{

stack[top++] = p;

}

struct point pop(void)

{

return stack[--top];

}

int is_empty(void)

{

return top == 0;

}

int maze[MAX_ROW][MAX_COL] = {

0,1,};

void print_maze(void)

{

int i,j;

for (i = 0; i < MAX_ROW; i++) {

for (j = 0; j < MAX_COL; j++)

printf("%d ",maze[i][j]);

putchar('\n');

}

printf("*********\n");

}

struct point predecessor[MAX_ROW][MAX_COL] = {

{{-1,-1},{-1,-1}},{{-1,};

void visit(int row,int col,struct point pre)

{

struct point visit_point = { row,col };

maze[row][col] = 2;

predecessor[row][col] = pre;

push(visit_point);

}

int main(void)

{

struct point p = { 0,0 };

maze[p.row][p.col] = 2;

push(p);

while (!is_empty()) {

p = pop();

if (p.row == MAX_ROW - 1 /* goal */ && p.col == MAX_COL - 1)

break;

if (p.col+1 < MAX_COL /* right */ && maze[p.row][p.col+1] == 0)

visit(p.row,p.col+1,p);

if (p.row+1 < MAX_ROW /* down */ && maze[p.row+1][p.col] == 0)

visit(p.row+1,p.col,p);

if (p.col-1 >= 0 /* left */ && maze[p.row][p.col-1] == 0)

visit(p.row,p.col-1,p);

if (p.row-1 >= 0 /* up */ && maze[p.row-1][p.col] == 0)

visit(p.row-1,p);

print_maze();

}

if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1)

{

printf("(%d,%d)\n",p.row,p.col);

while (predecessor[p.row][p.col].row != -1) {

p = predecessor[p.row][p.col];

printf("(%d,p.col);

}

} else

printf("No path!\n");

return 0;

}

希望本文所述对大家C语言程序设计有所帮助。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您讲解C语言使用深度优先搜索算法解决迷宫问题深度优先搜索算法是一种用于遍历或搜索树或图的算法,它从起点开始,尽可能深地搜索每个可能的路径,直到找到目标节点或无法继续搜索为止。 在解决迷宫问题时,我们可以将迷宫看作一个图,其每个格子都是一个节点,相邻的格子之间有一条边。我们可以使用深度优先搜索算法从起点开始遍历图,直到找到终点为止。在搜索过程,我们需要记录当前路径,并且每次遍历到一个节点时,都需要判断它是否是终点,如果是终点则搜索结束,否则继续向下搜索。 以下是C语言代码示例: ```c #include<stdio.h> #define ROW 5 #define COL 5 int maze[ROW][COL] = { {0, 0, 0, 0, 0}, {0, 1, 1, 0, 0}, {0, 1, 1, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 0, 1, 0} }; int visited[ROW][COL] = {0}; //记录节点是否被访问过 int dx[4] = {0, 0, 1, -1}; //定义四个方向的移动 int dy[4] = {1, -1, 0, 0}; void dfs(int x, int y){ if(x<0 || x>=ROW || y<0 || y>=COL) return; //越界返回 if(visited[x][y] || maze[x][y]) return; //已访问或者是墙返回 visited[x][y] = 1; //标记为已访问 if(x == ROW-1 && y == COL-1){ //到达终点 printf("Find the way!\n"); return; } for(int i=0; i<4; ++i){ //向四个方向进行搜索 int nx = x + dx[i]; int ny = y + dy[i]; dfs(nx, ny); } } int main(){ dfs(0, 0); //从起点开始搜索 return 0; } ``` 在上述代码,我们使用深度优先搜索算法从起点开始遍历迷宫,并且使用visited数组记录节点是否被访问过。在搜索过程,我们向四个方向进行搜索,直到找到终点或者无法继续搜索为止。如果找到了终点,则输出"Find the way!",搜索结束。 希望这个例子可以帮助您理解C语言使用深度优先搜索算法解决迷宫问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值