深度优先搜索算法解决卒子穿阵问题

本文介绍了一种使用深度优先搜索算法解决4x4迷宫问题的方法,通过栈结构实现卒子从指定起点到终点的路径寻找。详细展示了算法的实现代码,包括栈操作、迷宫阵列定义、路径记录及最终路径输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 深度优先搜索算法————卒子穿阵

一.实验内容:在一个4*4的阵列内,1表示敌兵驻守区域,不能进入,0区域可以行走,编写程序实现卒子从(0,1)处进入从(3,3)处出来的路径。

二.实验代码:

#include <stdio.h>

#define ROW 4       //行

#define LINE 4      //列

 

struct point { int row, line; } stack[100];

int top = 0;         //栈顶位置      

 

void push(struct point p)  //压栈

{

stack[top++] = p;

}

 

struct point pop()       //弹栈

{

return stack[--top];

}

 

int empty()      //判断栈空

{

return top == 0;

}

 

int Maze[ROW][LINE] = {     //迷宫阵列

1, 0, 0, 0,

0, 0, 1, 0,

0, 1, 0, 0,

1, 0, 0, 0,

};

 

void print()            //显示迷宫阵列

{

int i, j;

for (i = 0; i < ROW; i++)

{

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

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

    printf("\n");

}

printf("-------------\n");

}

 

struct point before[ROW][LINE] = {       //各点的前驱,全部初始化为(-1,-1)

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

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

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

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

};

 

void visit(int row, int line, struct point bef)  //走到该点

{

struct point visit_point = { row,line };

Maze[row][line] = 2;            //走过的点赋值为2,防止重复走

before[row][line] = bef;

push(visit_point);          //将该点入栈

}

 

int main()

{

struct point p = { 0, 1 };    //起点

 

Maze[p.row][p.line] = 2;     //起点赋值为2,避免重复走

push(p);                  //该点入栈

 

while (!empty())             

{

p = pop();             

if (p.row == ROW - 1 && p.line == LINE - 1)

break;

if (p.line+1 < LINE && Maze[p.row][p.line+1] == 0)   //往右边走

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

if (p.row+1 < ROW  && Maze[p.row+1][p.line] == 0)    //往下边走

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

if (p.line-1 >= 0  && Maze[p.row][p.line-1] == 0)    //往左边走

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

if (p.row-1 >= 0 && Maze[p.row-1][p.line] == 0)      //往上边走

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

print();       //显示当前状态的迷宫阵列

}

if (p.row == ROW - 1 && p.line == LINE - 1)

{

printf("最优深度搜索路径为:\n");

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

while (before[p.row][p.line].row != -1)

{

p = before[p.row][p.line];

    printf("(%d , %d)\n", p.row, p.line); //输出路径

}

}

else

printf("没有路径!\n");

      return 0;

}

四.实验结果:

              

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值