| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 157 人关注过本帖
标题:遇到C语言一个输出迷宫路径的困难,求各位大神帮忙解决
只看楼主 收藏
一个小伙
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-6-13
  问题点数:20  回复次数:2   
遇到C语言一个输出迷宫路径的困难,求各位大神帮忙解决
#include <stdio.h>
#include <windows.h>
#include<conio.h>
#include<time.h>
#define MATH_I 40
#define MATH_J 40
void PrintPath(int,int);
void MakePath(int,int);
void ArithmeticPath(int,int);
void writhCursor(int,int,char*);
void Control(int,int);
void Person(int,int,int,int);
int z1,z2;
int a=0,b=1;
int path[MATH_I][MATH_J];
int top=0;
typedef struct plot
{
    int col;
    int row;
} plot;
plot stack[200];
void pop()
{
    top--;
}
void push(int x,int y)
{
    stack[top].col=x;
    stack[top].row=y;
    top++;
}

void MakePath(int x,int y)
{
    int i,j;
    for(i=0;i<=x;i++)
        for(j=0;j<=y;j++)
        path[i][j]=1;        //将所有节点设置成未访问节点
    for(i=0;i<=x;i++)
     for(j=0;j<=y;j++)
     if(i==0||i==x||j==0||j==y)
     path[i][j]=0; path[2][1]=0;        //设置迷宫的入口和出口
     path[x-2][y-1]=0;
     srand((unsigned)time(NULL));        //获取系统时间
     ArithmeticPath(rand()%(x/2),rand()%(y/2));
}
void PrintPath(int x,int y)

{
    int i,j;
    for(i=1;i<=x-1;i++)
    {
        for(j=1;j<=y-1;j++)
        {
            if(path[i][j]==0)
            printf("  ");
            else
            {
                printf("█");
            }
        }
        printf("\n");
    }
}
void ArithmeticPath(int x,int y)
{
    int init[4][2]={0,1,1,0,0,-1,-1,0};          //使随机选的点能在其四周移动
    int z1=x*2,z2=y*2;                           //防止随机选的点靠近墙不能在该位置生成路
    int next,turn,i;
    path[z1][z2]=0;        //代表该节点以访问过
    turn = rand()%2?1:3;                        //为了可以随机分配移动方向
    for(i=0,next=rand()%4;i<4;i++,next=(next+turn)%4)
    if(path[z1+2*init[next][0]][z2+2*init[next][1]]==1)
{
    path[z1+init[next][0]][z2+init[next][1]]=0;   //如果前两个是墙,使前一个变为路
    ArithmeticPath(x+init[next][0], y+init[next][1]);    //递归调用
}
}
void depth_search(int x,int y)
{
    push(x,y);
    path[x][y]=2;
    while(1)
    {
        if(y+1<11&&path[x][y+1]==0)
        {
            y++;
            push(x,y);
            path[x][y]=2;
            continue;
        }
        if(x+1<11&&path[x+1][y]==0)
        {
            x++;
            push(x,y);
            path[x][y]=2;
            continue;
        }
        if(y>1&&path[x][y-1]==0)
        {
            y--;
            path[x][y];
            path[x][y]=2;
            continue;
        }
        if(x>1&&path[x-1][y]==0)
        {
            x--;
            path[x][y];
            path[x][y]=2;
            continue;
        }
        if(x!=10&&y!=11)
        pop();
        else
        break;
    }
}
void print_path()
{
    for(int i=0;i<top;i++)
    {
        printf("<%d,%d> ",stack[i].col,stack[i].row);
    }
}
int main()
{
        MakePath(12,12);
        PrintPath(12,12);
        depth_search(2,1);;
        print_path();
    return 0;
}



depth_search函数的最后一个if如果没有那个else还能够输出一部分路径如图:

要是加上那个else后就没有了输出结果

本人新人一枚,请各位大神帮忙解决
附件: 您没有浏览附件的权限,请 登录注册
5 天前 14:55
幻紫灵心
Rank: 2
来 自:山咔咔里面
等 级:论坛游民
帖 子:21
专家分:35
注 册:2018-3-30
  得分:0 
你这个depth_search的算法不能走到出口,不加else的话输出的路径也是错的,加了else走不到出口会死循环。
5 天前 16:02
一个小伙
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-6-13
  得分:0 
回复 2楼 幻紫灵心
应该怎么解决?
5 天前 16:05







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037495 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved