博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈实现迷宫问题
阅读量:7105 次
发布时间:2019-06-28

本文共 2706 字,大约阅读时间需要 9 分钟。

很久没写代码了,主要是现在学了一下JAVA,顺便把上课的内容实现一下。栈实现迷宫问题也就是栈实现dfs,主要是顺便把路径记录在栈里,所以稍微有些复杂,下面是代码:

JAVA实现:

package com.stack;import java.util.Stack;class node{	int x,y,dir;	node(int x,int y,int dir){		this.x=x;		this.y=y;		this.dir=dir;	}}public class StackDfs{	private static int[][] move={
{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; public static int path(int[][] maze,Stack
s){ node temp=new node(1,1,-1);//一开始标记为-1,方便后面+1后从0开始 s.push(temp); while(!s.isEmpty()){ node now=s.peek(); int x=now.x,y=now.y,dir=now.dir+1;//注意这里dir+1,因为回溯后从下一个方向开始 while(dir<8){ //dir之前的方向之前已经处理过了 int xx=x+move[dir][0]; int yy=y+move[dir][1]; if(maze[xx][yy]==0){ temp=new node(xx,yy,dir); s.push(temp); x=xx; y=yy; maze[x][y]=-1; if(x==6&&y==8){ return 1; }else{ dir=0;//前进一步变化方向从0开始 } }else{ dir++;//变化方向为下一个 } } s.pop();//没有路了就回溯 } return 0; } public static void main(String[] args){ int maze[][]={
{1,1,1,1,1,1,1,1,1,1}, {1,0,1,1,1,0,1,1,1,1}, {1,1,0,1,0,1,1,1,1,1}, {1,0,1,0,0,0,0,0,1,1}, {1,0,1,1,1,0,1,1,1,1}, {1,1,0,0,1,1,0,0,0,1}, {1,0,1,1,0,0,1,1,0,1}, {1,1,1,1,1,1,1,1,1,1}}; Stack
s=new Stack
(); int ans=path(maze,s); while(!s.isEmpty()){ node temp=s.pop(); System.out.println(temp.x+" "+temp.y+" "+temp.dir); } }}

C++实现:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int MAX = 50;int maze[8][10] = { { 1,1,1,1,1,1,1,1,1,1 }, { 1,0,1,1,1,0,1,1,1,1 }, { 1,1,0,1,0,1,1,1,1,1 }, { 1,0,1,0,0,0,0,0,1,1 }, { 1,0,1,1,1,0,1,1,1,1 }, { 1,1,0,0,1,1,0,0,0,1 }, { 1,0,1,1,0,0,1,1,0,1 }, { 1,1,1,1,1,1,1,1,1,1 } };int mov[8][2] = { { 0,1 },{ 1,1 },{ 1,0 },{ 1,-1 },{ 0,-1 },{ -1,-1 },{ -1,0 },{ -1,1 } };typedef struct node { int x, y; int dir;};stack
S;bool bound(int x, int y) { if (x < 0 || x >= MAX || y < 0 && y >= MAX) return false; return true;}bool dfs(int sx, int sy,int ex,int ey) { S.push(node{ sx,sy,-1}); while (!S.empty()) { node p = S.top(); int x = p.x, y = p.y,dir=p.dir+1; while (dir < 8) { int xx = x + mov[dir][0]; int yy = y + mov[dir][1]; if (maze[xx][yy] == 0) { S.push(node{ xx,yy,dir }); x = xx; y = yy; maze[x][y] = -1; if (x == ex&&y == ey) { return true; } else { dir = 0; } } else { dir++; } } S.pop(); } return false;}int main() { dfs(1, 1, 6, 8); while(!S.empty()){ node temp = S.top(); S.pop(); cout << temp.x << " " << temp.y << " " << temp.dir << endl; } return 0;}

转载于:https://www.cnblogs.com/seasonal/p/10343643.html

你可能感兴趣的文章
Snapchat 首份成绩单表现不好,它未来还有更多“劫”要渡
查看>>
济宁用大数据“科学治气”
查看>>
联发科技与Orange合作加速物联网设备普及
查看>>
GridView全选
查看>>
我的软件测试之旅:(4)并行——自动化回归测试
查看>>
存储过程中用到的年,月,周的函数
查看>>
SDN的发展壮大确实在蚕食物理网络基础设施的阵地
查看>>
Hadean完成260万美元融资,将颠覆 Spark、Hadoop等大数据框架
查看>>
东芝无意向富士康出售芯片业务 担心关键技术外流给中国
查看>>
测试工作中的技能储备
查看>>
保护个人信息不力当用法治“长记性”
查看>>
客服中心运营管理之“化繁为简”
查看>>
迅雷回应用户数据被拖库致密码泄露:恶意造谣
查看>>
Citrix备战应用程序发布软件桥 引领运营商进入NFV时代
查看>>
睡觉总是流口水?今晚就试试这些解决方法吧
查看>>
OA系统选型:明确需求是捷径
查看>>
第三季度 46% 的 DDoS 攻击都来自 Linux 计算机
查看>>
《TCP/IP路由技术(第一卷)(第二版)》一1.12 故障诊断练习
查看>>
Team 文档协作功能重磅推出,你讨厌写文档吗?
查看>>
《编写高质量代码:改善c程序代码的125个建议》——建议15-1:避免“=”与“==”混淆...
查看>>