数据结构迷宫问题 C++算法

C++编译,栈结构要求用户输入迷宫的大小m行和n列,两者为整数2.由输入的m和n,随机产生0或1,建立迷宫3.输出模拟的迷宫,若存在最短路径,则由出口回溯到入口打印这一条... C++编译,栈结构
要求用户输入迷宫的大小m行和n列,两者为整数2.由输入的m和n,随机产生0或1,建立迷宫3.输出模拟的迷宫,若存在最短路径,则由出口回溯到入口打印这一条路径,如下所示:(m,n),...,(i,j),...,(1,1)如无通道,则输出:没有通路
求大神给个代码吧,最好是源文件,急用所以来求C++大神
展开
 我来答
Maigellan
2013-12-10 · TA获得超过218个赞
知道答主
回答量:52
采纳率:0%
帮助的人:71.9万
展开全部

/*百度作个东西能用点心么 代码区的代码丑爆了
 *程序的框架:宏定义,函数声明,main函数,函数实现
 * =========================================================
 *       Filename:  maze.c
 *    Description:  基于栈寻找迷宫路径
 *
 * =========================================================
 */
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define ROW 10 /*迷宫大小*/
#define COL 10
#define STACKSIZE 100  /*栈大小*/
#define ISEND(n) ((n).p.x==ROW-1 &&(n).p.y==COL-1)/*判断该位置是否为出口*/
#define ISVALID(n) ((n).visit== NO &&((n).path== YES))/*判断该位置是否可走*/
#define ISEMPTY(s) (s.top==0)
enum Bool{
    NO,
    YES
};
/*---------------------------------------------------
 *  棋盘由R*C 个节点构成,每个节点包含的信息由:
 *  节点位置(x,y) , 是否是死路(yes/no) , 是否被访问过(yes/no)
 *---------------------------------------------------*/
typedef struct point Point;
typedef struct node Node;
typedef struct maze Maze;
struct point{
    int x,y;
};
struct node{
    Point p;
    int path;
    int visit;
};
struct maze{
    Node ma[ROW][COL];
};
/*---------------------------------------------------
 *  1.初始化迷宫,每个节点有4/5的概率可走
 *  2.输出迷宫的构造
 *---------------------------------------------------*/
void Initmaze(Maze *m);
void printmaze(Maze m);
/*---------------------------------------------------
 *  存储访问过程的栈及相应操作
 *---------------------------------------------------*/
typedef struct stack Stack;
struct stack{
    Node *no[STACKSIZE];
    int top;
};
Stack s;
void push(Node * n);
Node* pop();
void print(Stack s);


/*---------------------------------------------------
 *  find path based on stack  这个是关键函数,基于回溯思想
 *---------------------------------------------------*/
int findpath(Maze *m,Node *n);

int main(){
    Maze m;
    Initmaze(&m);
    printmaze(m);
    Node *n=m.ma[0];
    if(findpath(&m,n))
        print(s);
}

void Initmaze(Maze *m){
    int i,j;
    srand(time(NULL)); /* initialize random seed */
    for(i=0;i<ROW;i++)
        for(j=0;j<COL;j++){
            m->ma[i][j].visit=NO;
            m->ma[i][j].p.x=i;
            m->ma[i][j].p.y=j;
            m->ma[i][j].path=((i==0 && j==0) || (i==ROW-1 && j==COL-1) || rand()%ROW < 4*ROW/5)?YES:NO;
        }
}

int findpath(Maze *m,Node *n){
    while(!ISEND(*n)){
        if(n->visit==NO){
            n->visit=YES;
            push(n);
        }
        int current_x=n->p.x;
        int current_y=n->p.y;
        if(current_y+1<COL && ISVALID(m->ma[current_x][current_y+1])) /* rigth valid */
            n=m->ma[current_x]+current_y+1;
        else if(current_x+1<ROW && ISVALID(m->ma[current_x+1][current_y])) /* down valid */
            n=m->ma[current_x+1]+current_y;
        else if(current_x-1>=0 && ISVALID(m->ma[current_x-1][current_y])) /* up valid */
            n=m->ma[current_x-1]+current_y;
        else if(current_y-1>=0 && ISVALID(m->ma[current_x][current_y-1])) /* left valid */
            n=m->ma[current_x]+current_y-1;
        else{
            pop(); /* current n is not valid */
            if(!ISEMPTY(s)) /* n point to pre */
                n=s.no[s.top-1];
            else{
                printf("stack empty.\n");
                n=NULL;
                break;
            }
        }
    }
    if(n==NULL)
        return 0;
    else{
        push(n);
        return 1;
    }

}

void push(Node * n){
    s.no[s.top++]=n;
}
Node * pop(){
    if(s.top!=0)
        return s.no[--s.top];
    else{
        printf("%s","stack empty\n");
        return NULL;
    }
}

void print(Stack s){
    int iter;
    for(iter=0;iter<s.top;iter++)
        printf("%d %d\n",s.no[iter]->p.x,s.no[iter]->p.y);
}
void printmaze(Maze m){
    int i,j;
    for(i=0;i<ROW;i++)
        for(j=0;j<COL;j++)
            printf("%d%s",m.ma[i][j].path,(j==COL-1)?"\n":" ");
}

给C行么,改改就是了。

output:如果无路径


如果有路径.

更多追问追答
追问
“用户输入迷宫的大小m行和n列,由输入的m和n,随机产生0或1,建立迷宫”,这个功能可以实现吗?
追答
这个程式里迷宫的大小在宏里定义了。根据用户的输入来构造迷宫,需要重写构建迷宫的函数,用动态内存分配就ok啦,在C里就是malloc那一套。
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式