八方向迷宫寻路的全部路径

八方向迷宫,可寻出全部路径
最外层需要全部放1
写的比较粗糙,日后改进

#include <iostream>
using namespace std;
int StepComplete;
int ans=0;
void cin_maze(int **a,int row,int column){
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < column; j++)
        {
            cin>>a[i][j];
        }
    }
}
void print(int **maze_path,int h,int w)
{
    cout<<"The path is "<<endl;
    for (int i = 0;i < h;++i)
    {
        for (int j = 0;j < w;++j)
        {
            if(maze_path[i][j])
                cout<<"* ";
            else cout<<"  ";
        }
        cout << endl;
    }
}
//传入迷宫数组,迷宫最终路径数组,行数,列数,首次查找的X坐标,Y坐标,和查找步数
void dfs(int **maze, int **maze_path, int w, int h, int x, int y, int step){
    int TempStep=step;//表示传进来时试探到第几步
    if (x==(w-2) && y==(h-2))
    {
        ans++;
        cout<<ans<<endl;
        maze_path[x][y]=1;
        print(maze_path,w,h);
        maze_path[x][y]=0;
        return;
    }
    else
    {
        StepComplete=0;
        while (StepComplete<9)
        {
            switch (StepComplete)
            {
            case 0:if (maze[x][y-1]==0&&maze_path[x][y-1]==0)//正左逆时针开始
                   {
                       maze_path[x][y]=1;
                       maze[x][y]=2;
                       dfs(maze,maze_path,h,w,x,y-1,StepComplete);
                       maze_path[x][y]=0;
                       maze[x][y]=0;
                   };break;
            case 1:if (maze[x+1][y-1]==0&&maze_path[x][y]==0)
                   {
                       maze_path[x][y]=1;
                       maze[x][y]=2;
                       dfs(maze,maze_path,h,w,x+1,y-1,StepComplete);
                       maze_path[x][y]=0;
                       maze[x][y]=0;
                   };break;
            case 2:if (maze[x+1][y]==0&&maze_path[x+1][y]==0)
                   {
                       maze_path[x][y]=1;
                       maze[x][y]=2;
                       dfs(maze,maze_path,h,w,x+1,y,StepComplete);
                       maze_path[x][y]=0;
                       maze[x][y]=0;
                   };break;
            case 3:if (maze[x+1][y+1]==0&&maze_path[x+1][y+1]==0)
                   {
                       maze_path[x][y]=1;
                       maze[x][y]=2;
                       dfs(maze,maze_path,h,w,x+1,y+1,StepComplete);
                       maze_path[x][y]=0;
                       maze[x][y]=0;
                   };break;
            case 4:if (maze[x][y+1]==0&&maze_path[x][y+1]==0)
                   {
                       maze_path[x][y]=1;
                       maze[x][y]=2;
                       dfs(maze,maze_path,h,w,x,y+1,StepComplete);
                       maze_path[x][y]=0;
                       maze[x][y]=0;
                   };break;
            case 5:if (maze[x-1][y+1]==0&&maze_path[x-1][y+1]==0)
                   {
                       maze_path[x][y]=1;
                       maze[x][y]=2;
                       dfs(maze,maze_path,h,w,x-1,y+1,StepComplete);
                       maze_path[x][y]=0;
                       maze[x][y]=0;
                   };break;
            case 6:if (maze[x-1][y]==0&&maze_path[x-1][y]==0)
                   {
                       maze_path[x][y]=1;
                       maze[x][y]=2;
                       dfs(maze,maze_path,h,w,x-1,y,StepComplete);
                       maze_path[x][y]=0;
                       maze[x][y]=0;
                   };break;
            case 7:if (maze[x-1][y-1]==0&&maze_path[x-1][y-1]==0)
                   {
                       maze_path[x][y]=1;
                       maze[x][y]=2;
                       dfs(maze,maze_path,h,w,x-1,y-1,StepComplete);
                       maze_path[x][y]=0;
                       maze[x][y]=0;
                   };break;
            case 8:StepComplete=TempStep;return;//试探到第八步的时候返回上一层试探,并把StepComplete设为上一层试探到的步数
            default:
                break;
            }
            StepComplete++;
        }
    }
}
int main(){
    int row,column;
    cout<<"请输入迷宫的行数:"<<endl;
    cin>>row;
    cout<<"请输入迷宫的列数:"<<endl;
    cin>>column;
    int **a = new int* [row];
    int **maze_path = new int* [row];
    for (int i = 0; i < row; i++)
    {
        a[i] = new int[column];
    }
    for (int i = 0; i < row; i++)
    {
        maze_path[i] = new int[column];
    }
    //将maze_path赋初值
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < column; j++)
        {
            maze_path[i][j]=0;
        }
    }
    cout<<"请输入迷宫:"<<endl;
    cin_maze(a,row,column);
    dfs(a,maze_path,row,column,1,1,0);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值