深度优先搜索,迷宫问题,边长大于7*7就运行不出来。
    var m = 7,n = 7, endx = 7,endy = 7,min=9999999;
    var a = [],book = [];
    //初始化迷宫 和走动记录图
    for(var i = 1;i<=m;i++){
        var now = [];
        for(var j=1;j<=n;j++){
            now[j] = 0;
        }
        a[i] = now;
    }
    a[1][3] = 1;
    a[3][3] = 1;
    a[4][2] = 1;
    a[5][4] = 1;
    a[6][1] = 1;
    a[6][2] = 1;
    a[6][3] = 4;
    a[6][4] = 3;
    for(var i = 1;i<=m;i++){
        var now = [];
        for(var j=1;j<=n;j++){
            now[j] = 0;
        }
        book[i] = now;
    }
    console.log(a);
    //初始化行走数组
    var next = [[0,1],[1,0],[0,-1],[-1,0]];//右 下 左 上
    //给迷宫的长宽高赋值
    function fuzhi(){
         m = $('chang').value;
         n = $('kuang').value;
         endx = $('heng').value;
         endy = $('zong').value;
    }
    function $(id){
        return document.getElementById(id);
    }

    //现在所在的x坐标,y坐标  以及步数
    function dfs(stax,stay,step){
        //下一步位置所在坐标tx,ty  和下一步可以到达的方向
        var tx,ty,k;
        //判断是否达到目标的位子
        if(stax==endx&&stay==endy){
            //更新最小值
            if(step<min){
                min = step;
            }
            //请注意这里返回很重要
            return ;
        }
        //枚举4种走法
        for(k = 0;k<=3;k++){
            //计算下一个点的坐标
            tx = stax +next[k][0];
            ty = stay +next[k][1];
        //判断是否越界
            if(tx<1||tx>n||ty<1||ty>m){
                continue;
            }
            //判断该点是否是障碍物或者已经在路经中
            if(a[tx][ty]==0&&book[tx][ty]==0){
                book[tx][ty]=1;//标记这个点已经走过
                dfs(tx,ty,step+1);//开始尝试下一个点
                book[tx][ty]=0;//尝试结束,取消这个点的标记
            }
        }
        return ;
    }
    book[1][1] = 1;
    dfs(1,1,0);
    console.log(min);

2个回答

代码都写在一起连换行都没有,怎么看.你说运行不起来,那么要么是运行时间过长,要么是递归深度太大。建议你找一个现成的程序先学习下。

ChenyiMX
ChenyiMX 其中endx endy是目标坐标,m 和 n 是迷宫的长和宽
一年多之前 回复
ChenyiMX
ChenyiMX 抱歉,是我疏忽了,我从新加了标签,写在下面 ,麻烦帮我看一下。因为7*7迷宫是可以求出最短距离,但是,8*8及其以上的迷宫都不能,不知道拿的问题
一年多之前 回复
    var m = 7,n = 7, endx = 7,endy = 7,min=9999999;
    var a = [],book = [];
    //初始化迷宫 和走动记录图
    for(var i = 1;i<=m;i++){
        var now = [];
        for(var j=1;j<=n;j++){
            now[j] = 0;
        }
        a[i] = now;
    }
    a[1][3] = 1;
    a[3][3] = 1;
    a[4][2] = 1;
    a[5][4] = 1;
    a[6][1] = 1;
    a[6][2] = 1;
    a[6][3] = 4;
    a[6][4] = 3;
    for(var i = 1;i<=m;i++){
        var now = [];
        for(var j=1;j<=n;j++){
            now[j] = 0;
        }
        book[i] = now;
    }
    console.log(a);
    //初始化行走数组
    var next = [[0,1],[1,0],[0,-1],[-1,0]];//右 下 左 上
    //给迷宫的长宽高赋值
    function fuzhi(){
         m = $('chang').value;
         n = $('kuang').value;
         endx = $('heng').value;
         endy = $('zong').value;
    }
    function $(id){
        return document.getElementById(id);
    }

    //现在所在的x坐标,y坐标  以及步数
    function dfs(stax,stay,step){
        //下一步位置所在坐标tx,ty  和下一步可以到达的方向
        var tx,ty,k;
        //判断是否达到目标的位子
        if(stax==endx&&stay==endy){
            //更新最小值
            if(step<min){
                min = step;
            }
            //请注意这里返回很重要
            return ;
        }
        //枚举4种走法
        for(k = 0;k<=3;k++){
            //计算下一个点的坐标
            tx = stax +next[k][0];
            ty = stay +next[k][1];
        //判断是否越界
            if(tx<1||tx>n||ty<1||ty>m){
                continue;
            }
            //判断该点是否是障碍物或者已经在路经中
            if(a[tx][ty]==0&&book[tx][ty]==0){
                book[tx][ty]=1;//标记这个点已经走过
                dfs(tx,ty,step+1);//开始尝试下一个点
                book[tx][ty]=0;//尝试结束,取消这个点的标记
            }
        }
        return ;
    }
    book[1][1] = 1;
    dfs(1,1,0);
    console.log(min);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于求迷宫最短路径(利用深度优先搜索)的问题

利用深度优先查找迷宫的最短路径的程序,哪位大神可以帮帮忙吗?

关于迷宫深度最短路径的问题

#include <iostream> #include <set> #include <string.h> #include <cmath> #include <cstdlib> #define N 100 using namespace std; struct node { double h,g,f; int x,y; bool operator<(node other)const { return f<other.f; } }; int map[N][N];//迷宫,1表示可以走,0表示不可以走 int row,col;//矩阵的行和列 multiset<node> open;//可以拓展节点 multiset<node>::iterator it; node close[N][N];//已经走过的节点 int step[8][2] = {1,0,0,1,-1,0,0,-1,1,1,1,-1,-1,1,-1,-1};//走的方式 int prev[N*N];//存放前一个节点 int Init() { memset(close,0,sizeof(close)); } double getg(node a,node b)//获取当前点到终点的路径值 { return sqrt(1.0*(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } bool Is_Match(node a,node b) { if(a.x == b.x && a.y == b.y) { return true; } return false; } node begin,end; int main() { while(cin>>row>>col) { open.clear(); Init(); for(int i=0;i<row;i++)//输入迷宫 { for(int j=0;j<col;j++) { cin>>map[i][j]; } } cin>>begin.x>>begin.y>>end.x>>end.y;//起始点和终点 begin.g = getg(begin,end);//初始化起始点的估值函数 begin.f = begin.g; begin.h = 0; open.insert(begin);//open表插入起点 bool IsSuccess = false; while(!open.empty())//但还有节点可以走 { node son = *(open.begin());//取出路径消耗+估值函数最小的节点 open.erase(open.begin());//从open表中删除上面的节点 for(int i=0;i<8;i++)//探寻8个方向 { int u = son.x+step[i][0]; int v = son.y+step[i][1]; if(u>=0&&v>=0&&u<row&&v<col&&map[u][v])//如果这个节点在矩阵中,且值为1,可以走 { //更新这个节点的信息,包括路径消耗和估值函数 node tmp; tmp.x = u; tmp.y = v; tmp.g = getg(tmp,end); tmp.h = son.h+1; tmp.f = tmp.h + tmp.g; bool IsInOpen = false;//表示是否在open表中 if(u == end.x&&v == end.y)//如果是终点,就退出循环 { prev[u*7+v] = son.x*7+son.y;//记录前一个节点 IsSuccess = true;//表示成功找到了路径 goto BreakPoint; } for(it = open.begin();it!=open.end();it++) { //如果在open表中,比较tmp这个点与open表中的f的大小,如果前者f小就把tmp插入到open表中 if(Is_Match(*it,tmp)) { IsInOpen = true;//表示在open表中 if((*it).f>tmp.f) { node New = tmp; open.erase(it); open.insert(tmp); prev[tmp.x*7+tmp.y] = son.x*7+son.y;//记录前一个节点 break; } } } bool IsInClose = false;//标记是否在close表中 if(close[tmp.x][tmp.y].f)//如果在close中,表示已经走过,再次比较f的大小,如果前者f小,把这个点插入到open表中,并从close表中删除这个点。 { IsInClose = true;//在close表中 if(tmp.f < close[tmp.x][tmp.y].f) { open.insert(tmp); close[tmp.x][tmp.y].f = 0; close[tmp.x][tmp.y].g = 0; close[tmp.x][tmp.y].h = 0; prev[tmp.x*7+tmp.y] = son.x*7+son.y;//记录前一个节点 } } if(!IsInOpen&&!IsInClose)//如果既不在close表中,也不在open表中,表示没有走过,把这个节点插入open表中。 { open.insert(tmp); prev[tmp.x*7+tmp.y] = son.x*7+son.y;//记录前一个节点 } } } //把从open表中取出点得放到close表中,表示已经走过 close[son.x][son.y].x = son.x; close[son.x][son.y].y = son.y; close[son.x][son.y].g = son.g; close[son.x][son.y].f = son.f; close[son.x][son.y].h = son.h; } BreakPoint:; if(IsSuccess)//如果成功找到了路径,输出路径,我没有去反序输出结果,所以点是倒着的。 { cout<<"The Path Is:"<<endl; int x = end.x*7+end.y; int y = begin.x*7+begin.y; while(x!=y) { cout<<"("<<x/7<<","<<x%7<<") -- > "; x = prev[x]; } cout<<"("<<begin.x<<","<<begin.y<<")"<<endl; cout<<endl; cout<<"Reach Success!"<<endl; } else //不能到达终点 { cout<<"Reach Failed!"<<endl; } } } 这个程序输出的路径是倒着输出的 请问怎么修改才能让它正序输出路径,求帮忙 谢谢

数据结构C++语言解决迷宫问题

标题: 迷宫问题 时 限: 100000 ms 内存限制: 100000 K 总时限: 3000 ms 描述: 迷宫问题 迷宫是一个二维矩阵,其中1为墙,0为路,3为入口,4为出口.要求从入口开始,从出口结束,按照 下,左,上,右 的顺序来搜索路径. 输入: 迷宫宽度w 迷宫高度h 迷宫第一行 迷宫第二行 ... 迷宫第h 行 输出: 入口横坐标1 入口纵坐标1 横坐标2 纵坐标2 横坐标3 纵坐标3 横坐标4 纵坐标4 ... 横坐标n-1 纵坐标n-1 出口横坐标n 出口纵坐标n 输入样例: 8 10 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 1 0 3 1 0 1 1 1 0 0 1 0 0 4 1 1 0 0 0 0 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 输出样例: 3 3 2 3 2 4 2 5 3 5 3 6 3 7 4 7 4 6 4 5 4 4 5 4 6 4

C:用递归及非递归解决迷宫问题

以下是现有的代码,但是递归放在里面出现错误,求大神给我改改。 #include<stdlib.h> #include<stdio.h> #define N 39 #define M 39 int X; int maze[N+2][M+2]; /******递归函数定义*******/ typedef struct { int x,y; }Dj; Dj move[4]; /******非递归函数定义*******/ struct point{ int row,col,predecessor; }queue[512]; int head=0,tail=0; /******* 手动生成迷宫函数**********/ void shoudong_maze(int m,int n) { int i,j; printf("\n\n"); printf("请按行输入迷宫(0表示通路,1表示障碍,不包括墙,中间用空格隔开):\n\n"); for(i=0;i<m+2;i++) for(j=0;j<n+2;j++) scanf("%d",&maze[i][j]); } /******* 自动生成迷宫函数**********/ void zidong_maze(int m,int n) { int i,j; printf("\n迷宫正在生成,请稍后。\n\n"); system("pause"); for(i=1;i<m+1;i++) for(j=1;j<n+1;j++) maze[i][j]=rand()%2; //由于rand()产生的随机数是从0到RAND_MAX(最大) //RAND_MAX是定义在stdlib.h中的,其值至少为32767) //要产生从X到Y的数,只需要这样写:k=rand()%(Y-X+1)+X; for(i=0;i<m+2;i++) { maze[0][i]=1; maze[m+1][i]=1; } for(j=0;j<n+2;j++) { maze[j][0]=1; maze[j][n+1]=1; } } /********将迷宫打印成图形*********/ void print_maze(int m,int n) { int i,j; printf("\n迷宫生成结果如下:\n\n"); printf("迷宫入口(1,1)\n"); printf(" ↓"); for(i=0;i<m+2;i++) { printf("\n"); for(j=0;j<n+2;j++) { if(maze[i][j]==0) printf("□"); if(maze[i][j]==1) printf("■"); } } printf("→\n"); printf("迷宫出口:(%d,%d)\n",m+1,n+1); } /**********打印迷宫路径 (若存在路径)***********/ void result_maze(int m,int n) { int i,j; printf("迷宫通路(用☆表示)如下所示:\n\t"); for(i=0;i<m+2;i++) { printf("\n"); for(j=0;j<n+2;j++) { if(maze[i][j]==0||maze[i][j]==2) printf("□"); if(maze[i][j]==1) printf("■"); if(maze[i][j]==3) printf("☆"); } } } /*******入队*********/ void enqueue(struct point p) { queue[tail]=p; tail++; } /*******出队*********/ struct point dequeue() { head++; return queue[head-1]; } /*******判断队列是否为空*******/ int is_empty() { return head==tail; } /*******访问节点*******/ void visit(int row,int col,int maze[41][41]) { struct point visit_point={row,col,head-1}; maze[row][col]=2; enqueue(visit_point); } /*******探索迷宫路径*******/ int mgpath(int maze[41][41],int m,int n) { int X=1; struct point p={1,1,-1}; if(maze[p.row][p.col]==1) { printf("\n===============================================\n"); printf("此迷宫无解\n\n"); X=0; return 0; } maze[p.row][p.col]=2; enqueue(p); while(!is_empty()) { p=dequeue(); if((p.row==m)&&(p.col==n)) break; if((p.col+1<n)&&(maze[p.row][p.col+1]==0))//右边界 visit(p.row,p.col+1,maze); if((p.row+1<m)&&(maze[p.row+1][p.col]==0))//下边界 visit(p.row+1,p.col,maze); if((p.col-1>=0)&&(maze[p.row][p.col-1]==0)) //左边界 visit(p.row,p.col-1,maze); if((p.row>=0)&&(maze[p.row-1][p.col]==0)) //上边界 visit(p.row-1,p.col,maze); } if(p.row==m-1&&p.col==n-1) { printf("\n==================================================================\n"); printf("迷宫路径为:\n"); printf("(%d,%d)\n",p.row,p.col); maze[p.row][p.col]=3; while(p.predecessor!=-1) { p=queue[p.predecessor]; printf("(%d,%d)\n",p.row,p.col); maze[p.row][p.col]=3; } } else { printf("\n=============================================================\n"); printf("此迷宫无解!\n\n"); X=0; } return 0; } /******递归函数*******/ int path(int maze[][N+2],Dj move[],int x,int y,int step) { int i; step++; maze[x][y]=step; step++; maze[x][y]=step; if(x==M&&y==N) return 1; for(i=0;i<4;i++) { if(maze[x+move[i].x][y+move[i].y]==0) if(path(maze,move,x+move[i].x,y+move[i].y,step)) return 1; } step--; maze[x][y]=0; return 0; } /********主函数********/ void main(void) { Dj move[4]; int maze[N+2][M+2]; int i,h,m,n,cycle=0; while(cycle!=(-1)) { printf("********************************************************************************\n"); printf(" 欢迎进入迷宫求解系统\n"); printf("********************************************************************************\n"); printf(" →_→ 手动生成迷宫 请按:1\n"); printf(" →_→ 自动生成迷宫 请按:2\n"); printf(" →_→ 退出 请按:3\n\n"); printf("********************************************************************************\n"); printf("\n"); printf("请选择你的操作:\n"); scanf("%d",&i); switch(i) { case 1:/*printf("\n请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); while((m<=0||m>39)||(n<=0||n>39)) { printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n"); printf("请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); } */ printf("********************************************************************************\n"); printf(" →_→ 递归算法 请按:1\n"); printf(" →_→ 非递归算法 请按:2\n"); printf(" →_→ 退出 请按:3\n\n"); printf("********************************************************************************\n"); printf("\n"); printf("请选择你的操作:\n"); scanf("%d",&h); if(h==1) { printf("\n请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); while((m<=0||m>39)||(n<=0||n>39)) { printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n"); printf("请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); } path(maze,move,0,0,0); shoudong_maze(m,n); print_maze(m,n); mgpath(maze,m,n); if(X!=0) result_maze(m,n); printf("\n\nPress Enter Contiue!\n"); getchar(); while(getchar()!='\n');break; } else { shoudong_maze(m,n); print_maze(m,n); mgpath(maze,m,n); if(X!=0) result_maze(m,n); printf("\n\nPress Enter Contiue!\n"); getchar(); while(getchar()!='\n');break; } case 2:printf("\n请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); while((m<=0||m>39)||(n<=0||n>39)) { printf("\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:\n\n"); printf("请输入行数:"); scanf("%d",&m); printf("\n"); printf("请输入列数:"); scanf("%d",&n); } zidong_maze(m,n); print_maze(m,n); mgpath(maze,m,n); if(X!=0) result_maze(m,n); printf("\n\nPress Enter Contiue!\n"); getchar(); while(getchar()!='\n'); break; case 3:cycle=(-1); break; default:printf("\n"); printf("你的输入有误!\n"); printf("\nPress Enter Contiue!\n"); getchar(); while(getchar()!='\n'); break; } } }

用DFS解决迷宫寻路问题的时间与空间复杂度

一个二维迷宫,判断一个人是否能从(0,0)要走到某个值为9的点,迷宫用2D数组表示,1为路,0为墙。请问以下代码的时间复杂度和空间复杂度?我有点绕晕了算不出来,谢谢! ``` public boolean find(int[][] grid){ if(grid==null || grid.length==0 || grid[0].length==0 || grid[0][0]==0) return 0; return helper(grid,0,0); } private boolean helper(int[][] grid,int x, int y){ if(x>=0&&x<grid.length&&y>=0&y<grid[0].length){ if(grid[x][y]==0) return false; else if(grid[x][y]==9) return true; else if(grid[x][y]==1){ grid[x][y]=2; return helper(grid,x,y-1)||helper(grid,x+1,y)||helper(grid,x,y+1)||helper(grid,x-1,y); } else return false; } else return false; } ```

并查集生成迷宫广度优先搜索最短路径时出现了问题 求大佬解答QAQ很急 拜托了!!!

#include<maze.h> #include<string.h> using namespace std; const int INF = 0x3f3f3f3f; int startx, starty, endx, endy;//起点,终点的行标和列标 int k = 0; bool visit[1000][1000]; int d[1000][1000]; int route[1000]; struct Node { int x, y; Node(int xx = 0, int yy = 0) { x = xx; y = yy; //this->pre = pre; } } vec[1000]; int parent [N*N];//父结点 maze::maze()//构造函数 { } maze::maze(int x)//析构函数 { setN(x); mazeInit(); } void maze::print() { //Dijkstra(); /*输出迷宫*/ for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) cout<<mazes[i][j]<<" "; cout<<endl; } } /*设置迷宫大小*/ void maze::setN(int sizeN) { if(sizeN<4) sizeN=4; n = sizeN; m = (n-1)/2; } /*获得迷宫大小*/ int maze::getN() { return n; } /*获得路径长度*/ int maze::getLenPath() { return len_path; } /*初始化并查集数组,使parent[i]==i*/ void init() { //memset(rank, 0, sizeof(rank)); for(int i = 0; i < N*N; i++) parent[i] = -1; } /*函数搜索并返回包含元素X的树的根,递归实现*/ int Find(int x) { while(parent[x]>=0) x=parent[x];//循环查找x的根 return x; } /*函数求两个不相交的集合的并*/ void Union(int root1, int root2) { int r1 = Find(root1); int r2 = Find(root2); int temp; if(r1!=r2) { temp =parent[r1]+parent[r2]; if(parent[r2]<parent[r1]) { parent[r1]=r2; parent[r2]=temp; } else { parent[r2]=r1; parent[r1]=temp; } } } /*求在二维数组的(x,y)位置上的位置,并将其转化为一维数组下表*/ int tolist(int x, int y, int n) { return x*n+y; } /************************ **0表示墙,非零表示通路* ************************/ void maze::mazeInit() { //随机生成迷宫函数,将生成的函数保存在maze二维数组中 for(int i=0; i<n; i++) for(int j=0; j<n; j++) mazes[i][j] = 0;//不可走 init();//初始化并查集数组 for(int i = 1; i <n-1; i++) { if(i%2==1)//(i,j)均为奇数全部置1 for(int j = 1; j <n-1; j+=2) mazes[i][j] = 1;//可走 } //print(); //cout<<"*******************"<<endl; int sx, sy, ex, ey, x, y; srand(time(NULL));//设置一个随机种子,每次运行都能保证随机种子不同 int d; int tx1, ty1, tx2, ty2; sx = sy = 1; if(n%2==0) { ex = ey = n-3; } else { ex = ey = n-2; } //cout<<"测试"<<endl; /************************************************************** *实现步骤: * *—①随机选择一条边,判断边连接的顶点,是否在同一子树中,如果 * *是则执行③,如果不是则执行②。 * *—②连通这两个顶点,并把他们任意一个添加到另一个所在的子树中 * *—③判断起点和终点是否在同一子树中,如果不是则执行①,如果是 * *则退出。 * ****************************************************************/ int flag=0; while(1) { //判断起点和终点是否在同一子树中,如果是则退出,并且为连通图。 do { //当随机产生的迷宫中的点是通路时,循环,随机产生点(x,y) x = rand()%(n-2)+1;//围墙内部的点 y = (rand()+123)%(n-2)+1; } while(mazes[x][y] !=0);//为0时退出循环 d = x%2;//记录下行值的奇偶 if(!d) { /*d为偶数时,判断该位置上下是否在同一个集合,如果不在就合并 并将该点设置为通路*/ tx1 = x+1; ty1 = y; tx2 = x-1; ty2 = y; if(Find(tolist(tx1, ty1, n)) != Find(tolist(tx2, ty2, n))) { if(mazes[tx1][ty1]==1&&mazes[tx2][ty2]==1) { mazes[x][y] = 2; Union(tolist(tx1, ty1, n), tolist(tx2, ty2, n)); Union(tolist(tx1, ty1, n), tolist(x, y, n)); flag++; } } } else { /*d为奇数时,判断该位置左右是否在同一个集合,如果不在就合并 并将改点设置为通路*/ tx1 = x; ty1 = y+1; tx2 = x; ty2 = y-1; if(Find(tolist(tx1, ty1, n)) != Find(tolist(tx2, ty2, n))) { if(mazes[tx1][ty1]==1&&mazes[tx2][ty2]==1) { mazes[x][y] = 2; Union(tolist(tx1, ty1, n), tolist(tx2, ty2, n)); Union(tolist(tx1, ty1, n), tolist(x, y, n)); flag++; } } } // print(); // cout<<"*******************"<<endl; if((flag==m*m-1)&&(Find(tolist(sx, sy, n)) == Find(tolist(ex, ey, n)))) { break; } } for(int i=1;i<n;i++) { for(int j=1;j<n;j++) { if(mazes[i][j]==2) mazes[i][j]=1; } } //print(); //cout<<"*******************"<<endl; for(int i = 0; i < n; i++) { mazes[i][n-1] = 0;//将最后一列设置为非通路 mazes[n-1][i] = 0;//将最后一行设置为非通路 } if(n%2==0) { mazes[n-2][n-2]=1; mazes[n-2][n-3]=1; mazes[n-3][n-2]=0; } mazes[sx][sy-1] = 2;//入口 mazes[n-2][n-1] = 3;//出口 //print(); } int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 }; void BFS() { queue<Node> que; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) d[i][j] = INF; //初始化所有点的距离为INF que.push(Node(startx, starty)); d[startx][starty] = 0; //从起点出发将距离设为0,并放入队列首端 while (que.size()) //题目保证有路到终点,所以不用担心死循环 { Node node= que.front(); que.pop();//弹出队首元素 if(Node.first == endx&&Node.second == endy) { break; //已经到达终点则退出 } for (int i = 0; i < 4; i++) { int nx = Node.first + dx[i]; int ny = Node.second + dy[i];//移动后的坐标 //判断可移动且没到过 if (0 <= nx&&nx < N && 0 <= ny&&ny <N &&maze[nx][ny] != '#' &&d[nx][ny] == INF)//之前到过的话不用考虑,因为距离在队列中递增,肯定不会获得更好的解 { que.push(Node(nx, ny)); //可以移动则设定距离为之前加一,放入队列 d[nx][ny] = d[Node.first][Node.second] + 1; } } } } /*void maze::Dijkstra() { len_path=0; queue<Node>Q;//存放搜索过程中的位置信息 memset(visit, false, sizeof(visit)); memset(dis, INF, sizeof(dis)); startx=1; starty=0; endx=getN()-2; endy=getN()-1; dis[startx][starty] = 0; Q.push(Node(startx, starty, -1));//起点进队 Node t; int r[4][2] = { {-1,0},{0,1},{0,-1},{1,0} };//方向 while (!Q.empty()) { t = Q.front();//t=队首 vec[k++] = t;//vec[k++]=队首 visit[t.x][t.y] = true;//标记 if (t.x == endx && t.y == endy) break;//终点跳出 for (int i = 0; i < 4; i++)//上下左右依次进队 { int x = t.x + r[i][0];//左上下右 int y = t.y + r[i][1]; if (!visit[x][y] && mazes[x][y])//判断是否可以进队 { if (dis[x][y] > dis[t.x][t.y] + 1) { dis[x][y] = min(dis[x][y], dis[t.x][t.y] + 1); Q.push(Node(x, y, k - 1));//压进队尾 } } } Q.pop();//弹出队首 } route[0] = k - 1; k = 1; while (t.pre != -1) { route[k++] = t.pre; t = vec[t.pre]; } //len=0; //求最短路径 for(int i= k-1;i>=0;i--) { len_path++; } return; }*/ void maze::printPath()//输出迷宫路径 { BFS(); //Dijkstra(); for(int i = len_path-1; i >= 0; i--) { if(mazes[vec[route[i]].x][vec[route[i]].y]==1) { mazes[vec[route[i]].x][vec[route[i]].y] = 4; } } } void maze::recoverPath() { for(int i = len_path-1; i >= 0; i--) if(mazes[vec[route[i]].x][vec[route[i]].y]==4) mazes[vec[route[i]].x][vec[route[i]].y] = 1; } void maze::fileout() { double t =getTime(); BFS(); //Dijkstra(); /*输出到文件*/ ofstream SaveFile("C:\\Users\\PC\\Desktop\\mazePath.txt"); SaveFile<<"路径:"<<endl; for (int i = k-1; i >= 0; i--) { SaveFile << '(' <<vec[route[i]].x << ',' << vec[route[i]].y << ')'; //cout<< '(' <<vec[route[i]].x << ',' << vec[route[i]].y << ')'<<endl;//测试 } SaveFile << endl; SaveFile << "路径长度:" <<getLenPath()<< endl; SaveFile << "找路时间:" <<t<<"ms"<<endl; //测试 SaveFile.close(); } double maze::getTime() { //recoverPath();//确定没有执行过寻找路径 time_t start=0, finish; start = clock(); //printPath(); BFS(); //Dijkstra(); finish =clock(); double time=(double)(finish-start); return time; } ``` ``` 出现的问题是 error:expected primary-expression before '_' token 【第一次提问瑟瑟发抖,求大佬解答

c语言迷宫问题怎么解??

系统给出一个12×12的迷宫,编写一个递归函数来穿越迷宫,使用一个简单的算法,即将右手放在墙上,然后开始前进,最终必然会找到出口。 请编写递归函数来穿越迷宫,这个函数将接受一个表示迷宫的12×12的数组作为实参,由于该函数在迷宫中试图找到出口,所以函数将字符放在行走路线经过的空格上每次移动后,函数将显示迷宫的状态。 用#表示墙,用。表示路。 急求!!!有大佬能给一下函数的代码吗???实在不知道怎么写了,救救孩子!!!

升级版的迷宫搜索问题

一般的迷宫问题都是用深度优先或者广度优先就能直接找出结果,因为走每一步花费的时间都是一样的,所以只用考虑路程的长短就可以选出最优路径。此时如果我们将每一格加一个权值,存在A、B、C三种路,这三种路在上面走的时间是不一样的,整个迷宫格子是随机分配的,即有墙壁、A、B、C四种情况,那么怎么设计一种算法能够快速的找到最优解,或者近似最优解,而不用遍历每种情况呢

迷宫游戏问题 求大神解答

#include"stdio.h" void print(int front); mgpath(int xi, int yi, int xe, int ye); int mg[10][10]= { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 1, 0, 0, 0, 1, 0, 1 },{ 1, 0, 0, 0, 0, 1, 1, 0, 0, 1 }, { 1, 0, 1, 1, 1, 0, 0, 0, 0, 1 }, { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 },{ 1, 0, 1, 0, 0, 0, 1, 0, 0, 1 }, { 1, 0, 0, 1, 1, 0, 1, 1, 0, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }; int MaxSize=100; int front=-1; int rear=-1; struct Qu{ int i; int j; int pre;}q[100]; void main(){ int M = 8; int N = 8; mgpath(1, 1, M, N); } void print(int front) { int k=front, j, ns=0; printf("\n"); do { j = k; k = q[k].pre; q[j].pre = -1; } while (k != 0); printf("迷宫路径如下:\n"); k = 0; while (k < 100) { if (q[k].pre==-1) { ns++; printf("%d%3d",q[k].i,q[k].j); if (ns % 5==0) printf("\n"); } k++; } printf("\n"); printf("队列状态"); // System.out.println("下标 i j pre"); // for(int i=0;i<=q.rear;i++) // { // System.out.printf("%2d %d %d %2d\n",i,q.i[i],q.j[i],q.pre[i]); // } } mgpath(int xi, int yi, int xe, int ye) { int i, j, di; int find=0; rear++; q[rear].i=xi; q[rear].j=yi; q[rear].pre=-1; mg[xi][yi]=-1; // 标记入口 while (front<=rear && (!find)) { front++; i=q[front].i; j=q[front].j; if (i==xe && j==ye) { find=1; print(front); return 1; } for (di=0; di<4; di++) { switch (di) { case 0: i=q[front].i - 1; j=q[front].j; break; case 1: i=q[front].i; j=q[front].j + 1; break; case 2: i=q[front].i + 1; j=q[front].j; break; case 3: i=q[front].i; j=q[front].j - 1; } if (mg[i][j]==0) { rear++; q[rear].i=i; q[rear].j=j; q[rear].pre=front; mg[i][j]=-1; } } printf("NO WAY\n"); return 0; }

急!!!迷宫问题,一直停止运行,求大神改进一下

#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLEN 10//迷宫包括外墙最大行列数目 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 //存储空间初始分配量 typedef int Status; typedef struct{ int row; int col; }PosType;//迷宫中行列的位置 typedef struct MazeType{ int row; int col; int arr[MAXLEN][MAXLEN]; }MazeType; //迷宫类型 typedef struct{ int ord; //通道块在路径上的"序号" PosType seat; //通道块在迷宫中的"坐标位置" int di; //从此通道块走向下一通道块的"方向" }SElemType; //栈的元素类型 typedef struct Stacknode{ SElemType data; //数据域 struct Stacknode *next; //指针域 }*LinkStack; // ============构建一个空栈S================== int InitLinkStack(LinkStack &S) { S=(LinkStack)malloc(sizeof(LinkStack)); //通过malloc函数分配空间 if (!S) return ERROR; //如果分配失败,则返回 S->next=NULL; return OK; } //==========判断栈是否为空 =========================== Status LinkStackEmpty(LinkStack &S) { if (S!=NULL) { if (S->next==NULL) { return OK; } } return ERROR; } //====插入元素e为新的栈顶元素========================= Status PushLinkStack(LinkStack &S,SElemType e) { LinkStack q=S; LinkStack m=(LinkStack)malloc(sizeof(LinkStack)); //通过malloc函 数分配空间 if (S!=NULL) { while (q->next!=NULL) { q=q->next; } m->data=e; m->next=NULL; q->next=m; } return ERROR; } //==若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR== Status PopLinkStack(LinkStack &S,SElemType &e) { LinkStack q=S; if (S!=NULL) { if (q->next!=NULL) //若栈不是空的 { while (q->next->next!=NULL) { q=q->next; } e=q->next->data; q->next=NULL; return OK; } } return ERROR; } Status Pass(MazeType MyMaze,PosType CurPos) { if(MyMaze.arr[CurPos.row][CurPos.col]==0) return TRUE; // 如果当前位置是可以通过,返回 else return FALSE; // 其它情况返回 } Status FootPrint(MazeType &MyMaze,PosType CurPos){ MyMaze.arr[CurPos.row][CurPos.col]=2; return OK; } void MarkPrint(MazeType &MyMaze,PosType CurPos) { MyMaze.arr[CurPos.row][CurPos.col]=3; //return OK; } PosType NextPos(PosType CurPos,int Dir){ PosType ReturnPos; switch (Dir) { case 1: ReturnPos.row=CurPos.row; ReturnPos.col=CurPos.col+1; break; case 2: ReturnPos.row=CurPos.row+1; ReturnPos.col=CurPos.col+1; break; case 3: ReturnPos.row=CurPos.row+1; ReturnPos.col=CurPos.col; break; case 4: ReturnPos.row=CurPos.row+1; ReturnPos.col=CurPos.col-1; break; case 5: ReturnPos.row=CurPos.row; ReturnPos.col=CurPos.col-1; break; case 6: ReturnPos.row=CurPos.row-1; ReturnPos.col=CurPos.col-1; break; case 7: ReturnPos.row=CurPos.row-1; ReturnPos.col=CurPos.col; break; case 8: ReturnPos.row=CurPos.row-1; ReturnPos.col=CurPos.col+1; break; } return ReturnPos; } Status MazePath(MazeType &maze, PosType start, PosType end) { // 若迷宫maze中从入口start到出口end的通道,则求得一条存放在栈中 // (从栈底到栈顶),并返回TRUE;否则返回FALSE LinkStack S,S1; PosType CurPos; int curstep; SElemType e; InitLinkStack(S); InitLinkStack(S1); CurPos = start; // 设定"当前位置"为"入口位置" curstep = 1; // 探索第一步 do{ if(Pass(maze,CurPos)) { // 当前位置可通过,即是未曾走到过的通道块 FootPrint(maze,CurPos); // 留下足迹 e.ord = curstep; e.seat= CurPos; e.di =1; PushLinkStack(S,e); // 加入路径 if(CurPos.row == end.row && CurPos.col==end.col){ //到达终点(出口) while(!LinkStackEmpty(S)){ PopLinkStack(S,e); PushLinkStack(S1,e); } printf("迷宫的路径:"); while(!LinkStackEmpty(S1)){ PopLinkStack(S1,e); printf("第%d步:(%d,%d,%d) ",e.ord,e.seat,e.di); } return (TRUE); // 到达终点(出口) } CurPos = NextPos(CurPos, 1); // 下一位置是当前位置 的东邻 curstep++; // 探索下一步 } else { // 当前位置不能通过 if (!LinkStackEmpty(S)) { PopLinkStack(S,e); while (e.di==8 && !LinkStackEmpty(S)) { MarkPrint(maze,e.seat); //留下不能通过的标记 PopLinkStack(S,e); //并退回 一步 curstep--; } // while if (e.di<8) { e.di++; PushLinkStack(S,e); // 换下一个方向探索 CurPos = NextPos(e.seat,e.di); // 当前位置设为新方向的相邻块 } // if } // if } // else } while (!LinkStackEmpty(S) ); printf("此迷宫无通路!\n"); return FALSE; } // MazePath //========初始化迷宫========================= Status InitMaze(MazeType &maze){ int i,j; printf("请输入迷宫的行和列数: "); scanf("%d,%d",&maze.row,&maze.col); printf("请输入迷宫(0以表示可走,1表示有障碍):\n"); for(i=1;i<=maze.row;i++){ for(j=1;j<=maze.col;j++) maze.arr[i][j]=rand()%2; //scanf("%d",&maze.arr[i][j]); } for(i=0;i<=maze.col+1;i++){//迷宫行外墙 maze.arr[0][i]=1; maze.arr[maze.row+1][i]=1; }//for for(i=1;i<=maze.row;i++){//迷宫列外墙 maze.arr[i][0]=1; maze.arr[i][maze.col+1]=1; } return OK; } //=========以方阵形式输出迷宫及其通路============= void PrintMaze(MazeType &maze){ //将标记路径信息的迷宫输出到终端(包括外墙) int i,j; for(i=0;i<=maze.row+1;i++){ for(j=0;j<=maze.col+1;j++) printf("%2d",maze.arr[i][j]);//输出迷宫//当前位置的标记 printf("\n\n"); } }//PrintMaze int main(){ MazeType maze; PosType start,end; int n; printf("\n\t\t++++++++++++++++++++++++++++++++++++++++++"); printf("\n\t\t| 1.创建一个迷宫 |"); printf("\n\t\t| 2.求出迷宫通路的路径 |"); printf("\n\t\t| 3.方阵形式输出迷宫及其通路 |"); printf("\n\t\t++++++++++++++++++++++++++++++++++++++++++\n"); while(1){ printf("请选择: "); scanf("%d",&n); switch(n){ case 1: InitMaze(maze); printf("\n所输入的迷宫为:\n\n"); PrintMaze(maze); printf("输入入口的横坐标,纵坐标:\n"); scanf("%d,%d",&start.row,&start.col); printf("输入出口的横坐标,纵坐标:\n"); scanf("%d,%d",&end.row,&end.col); break; case 2: MazePath(maze,start,end); printf("\n"); break; case 3: printf("\n以方阵形式输出迷宫及其通路:(2:表示可通路径,3:表示死胡同):\n"); PrintMaze(maze); break; } } // return OK; }

QT 迷宫游戏 可视化迷宫

利用QT制作一个迷宫小游戏 程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。 要求 1老鼠形象可辨认,可以用键盘控制老鼠上下左右移动 2老鼠不能穿过迷宫的墙 3正确检测结果,若老鼠在规定的时间内走到粮仓处,提示成功,否则提示失败 4添加编辑迷宫的功能,可以修改当前迷宫,修改内容:墙变路,路变墙 5找到走出迷宫的所有路径以及最短路径 6利用序列化功能实现迷宫地图的存盘和读取

关于队列迷宫的一个问题

一个关于队列求解迷宫的小问题,发现把主函数里设置的出口坐标改动的时候会出现运行错误,比如说改成(1,1,8,1)就会有错。。。实在是有点看不懂了,发帖求教前辈们出手帮忙看看问题出在哪,要怎么改啊???编译软件codeblocks /* * 迷宫求解 * */ #include<stdio.h> #include<stdlib.h> #define MAXSIZE 1000 #define M 10 int mg[M][M] = { // 此迷宫有三条路径 {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,1,1,1,1,1,1}, {1,0,1,0,0,0,0,1,1,1}, {1,0,0,1,1,1,0,1,1,1}, {1,1,0,1,1,1,0,0,0,1}, {1,1,0,1,1,1,1,1,0,1}, {1,0,0,0,0,0,1,1,0,1}, {1,0,1,1,1,0,1,1,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1} }; // ------------------ 栈定义 ------------------------- struct{ int i,j; // 方块的位置 int pre; // 本路径中上一方块在路径中的下标 }Qu[MAXSIZE]; void print(int front); /* * 利用队列求解迷宫 */ void mgpath(int x1, int y1, int x2, int y2) { int front,rear; int find =0; int i,j; int di; front=-1; rear=-1; rear++; // (x1,y1)入队 Qu[rear].i = x1; Qu[rear].j = y1; Qu[rear].pre = -1; mg[x1][y1]=-1; // 置为-1, 以免重复搜索 while(front<=rear && !find) { front++; // 出队 i = Qu[front].i; j = Qu[front].j; if(i == x2 && j == y2) // 出口 { find = 1; print(front); return; } for(di=0;di<3;di++) { switch(di) { case 0: i=Qu[front].i - 1; j=Qu[front].j; break; case 1: i=Qu[front].i; j=Qu[front].j+1; break; case 2: i=Qu[front].i + 1; j=Qu[front].j; break; case 3: i=Qu[front].i; j=Qu[front].j - 1; break; } if(mg[i][j] == 0) // 找到 { rear++; // 插入 Qu[rear].i = i; Qu[rear].j = j; Qu[rear].pre = front; mg[i][j] = -1; } // if } // for } // while if(!find) printf("找不到可走路径"); } void print(int front) { int f,t; int ns=0; f=front; printf("\n"); do{ t = f; f = Qu[f].pre; Qu[t].pre = -1; //把当前的设为 -1 }while(f!=0); printf("路径如下:\n"); f=0; while(f<MAXSIZE) { if(Qu[f].pre==-1) { ns++; printf("(%d,%d) ",Qu[f].i,Qu[f].j); if(ns%5 == 0) printf("\n"); } f++; } } void main() { int i,j; printf("迷宫设置如下:\n\n"); for(i = 0; i < M; i++) { for(j = 0; j < M; j++) { printf("%d ",mg[i][j]); } printf("\n"); } mgpath(1,1,8,8); }

关于迷宫随机产生方向的问题,求教大神???

#include<iostream> using namespace std; template <class T> //声明一个类模板 class SqStack { public: //顺序栈类的各成员函数 SqStack(int m = 1000); ~SqStack(); void Clear(); bool Empty()const; int Length()const; T &Top()const; void Push(const T &e); void Pop(); private: //顺序栈类的数据成员 T *m_base; //基地址指针 int m_top; //栈顶指针 int m_size; //向量空间大小 }; //构造函数,分配m个结点的顺序空间,构造一个空的顺序栈。 template<class T> SqStack<T>::SqStack(int m) { m_top = 0; m_base = new T[m]; m_size = m; } //析构函数,将栈结构销毁。 template<class T> SqStack<T>::~SqStack() { if (m_base != NULL) delete[] m_base; } //清空栈。 template <class T> void SqStack<T>::Clear() { m_top = 0; } //判栈是否为空,若为空,则返回true,否则返回false。 template <class T> bool SqStack<T>::Empty()const { return m_top == 0; } //求栈的长度。 template <class T> int SqStack<T>::Length()const { return m_top; } //取栈顶元素的值。先决条件是栈不空。 template<class T> T &SqStack<T>::Top()const { return m_base[m_top - 1]; } //入栈,若栈满,则先扩展空间。插入e到栈顶。 template <class T> void SqStack<T>::Push(const T &e) { if (m_top >= m_size) { T* newbase; newbase = new T[m_size + 10]; for (int j = 0; j<m_top; j++) newbase[j] = m_base[j]; delete[] m_base; m_base = newbase; m_size += 10; } m_base[m_top++] = e; } //入栈,若栈满,则先扩展空间。插入e到栈顶。 template<class T> void SqStack<T>::Pop() { m_top--; }#include"windows.h" #include"stdlib.h" #include"time.h" #include"SqStack.h" #include "iostream" using namespace std; #define MAXSIZE 30 #define N 25 const static int _MAX = 65535; struct PosType { int x; int y; }; struct DataType { PosType seat; int di; }; //输出坐标 void gotoxy(int x, int y) { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); //定义一个结构体pos,x,y就是构成的成员 } void color(int b) { HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)); SetConsoleTextAttribute(hConsole, b); //调用API设置字体和背景的颜色函数 } class Maze { protected: // static int MAX = 1111; public: Maze(int, int,bool ); ~Maze(); bool MazePath(PosType, PosType,bool); void Input(); void Print(); void init(); void Manual(); private: PosType NextPos(PosType, int); int **m_maze; int m_row; int m_col; bool w; }; Maze::Maze(int m, int n,bool k) { if (k) { m_row = m + 2; m_col = n + 2; w = k; m_maze = new int *[m_row]; for (int i = 0; i < m_row; i++) m_maze[i] = new int[m_col]; this->Input(); } else { int i = 0, j = 0; m_row = m + 2; m_col = n + 2; w = k; m_maze = new int *[m_row]; for ( i = 0; i < m_row; i++) m_maze[i] = new int[m_col]; int p[20][20] = { 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, }; for (i = 1; i <= m_row - 2; i++) for (j = 1; j <= m_col - 2; j++) m_maze[i][j]=p[i-1][j-1]; // m_maze[i][j] = rand() % 2; for (i = 0; i < m_row; i++) { m_maze[i][0] = 65535; m_maze[i][m_col - 1] = 65535 ; } for (j = 1; j < m_col - 1; j++) { m_maze[0][j] = 65535; m_maze[m_row - 1][j] = 65535; } } } Maze::~Maze() { for (int i = 0; i < m_row; i++) if (m_maze[i] != NULL) delete[] m_maze[i]; if (m_maze != NULL) delete[] m_maze; } bool Maze::MazePath(PosType start, PosType end,bool m) { SqStack<DataType> path(MAXSIZE); PosType curpos; DataType e; curpos = start; int curstep = 2; e.di = 0; do { if (m_maze[curpos.x][curpos.y] == 0) { m_maze[curpos.x][curpos.y] = curstep; e.seat.x = curpos.x; e.seat.y = curpos.y; path.Push(e); curstep++; if (m) { Sleep(50); gotoxy(0,0); this->init(); } if (curpos.x == end.x && curpos.y == end.y) { m_maze[curpos.x][curpos.y] = 2; return true; } curpos = NextPos(curpos, e.di); } else { if (!path.Empty()) { e = path.Top(); path.Pop(); curstep--; while (e.di == 3&&!path.Empty()) { m_maze[e.seat.x][e.seat.y] = -1; e = path.Top(); path.Pop(); curstep--; } if (e.di < 3) { if(m_maze[e.seat.x+1][e.seat.y]==0&&m_maze[e.seat.x-1][e.seat.y]!=0&&m_maze[e.seat.x][e.seat.y+1]!=0&&m_maze[e.seat.x][e.seat.y-1]!=0) e.di=0; if(m_maze[e.seat.x+1][e.seat.y]!=0&&m_maze[e.seat.x-1][e.seat.y]==0&&m_maze[e.seat.x][e.seat.y+1]!=0&&m_maze[e.seat.x][e.seat.y-1]!=0) e.di=1; if(m_maze[e.seat.x+1][e.seat.y]!=0&&m_maze[e.seat.x-1][e.seat.y]!=0&&m_maze[e.seat.x][e.seat.y+1]==0&&m_maze[e.seat.x][e.seat.y-1]!=0) e.di=2; if(m_maze[e.seat.x+1][e.seat.y]!=0&&m_maze[e.seat.x-1][e.seat.y]!=0&&m_maze[e.seat.x][e.seat.y+1]!=0&&m_maze[e.seat.x][e.seat.y-1]==0) e.di=3; else { e.di =rand()%3; } curstep++; path.Push(e); curpos = NextPos(e.seat, e.di); } } } } while (!path.Empty()); return false; } void Maze::Input() { int i, j; cout << "请输入" << m_row-2 << "*" << m_col - 2 << "的迷宫:" << endl; for (i = 1; i <= m_row - 2; i++) for (j = 1; j <= m_col - 2; j++) cin >> m_maze[i][j]; for (i = 0; i < m_row; i++) { m_maze[i][0] = 65535; m_maze[i][m_col - 1] = 65535; } for (j = 1; j < m_col - 1; j++) { m_maze[0][j] = 65535; m_maze[m_row - 1][j] = 65535; } } void Maze::Print() { //FILE *fp; //errno_t err; // err = fopen_s(&fp, "output", "w"); // fprintf(fp, "----------迷宫路径----------\n"); int i, j; for (i = 0; i < m_row; i++) { for (j = 0; j < m_col; j++) { cout << " " << m_maze[i][j]; // fprintf(fp, "\t%d", m_maze[i][j]); } cout << endl; // fprintf(fp, "\n"); } // fprintf(fp, "\n"); // fclose(fp); } PosType Maze::NextPos(PosType c, int d) { PosType direct[4] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; c.x += direct[d].x; c.y += direct[d].y; return c; } //界面初始化 void Maze::init() //初始化一个迷宫 { for (int i = 0; i < m_row; i++) { for (int j = 0; j < m_col; j++) { if (m_maze[i][j]==1) { color(11); cout << "■"; //围墙或者此路不通 } else if (m_maze[i][j] ==65535) { color(10); cout << "◇"; } else if (m_maze[i][j]==0) { color(12); cout << "□"; //通路 } else if (m_maze[i][j] == 2) { color(15); cout << "★"; } else { color(14); cout << "★"; } } cout << endl; } } void Maze::Manual() { gotoxy(N + 25, 1); color(11); cout<<"现在呈现一个"<<m_row-2<<"*"<<m_col-2<<"迷宫"; } void main() { srand((unsigned)time(NULL)); while (1) { PosType begin, end; bool k; cout << "请选择模式:" << endl; cout << "如果要自己输入迷宫,输入非0数,如果要想用现成的输入0:" << endl; cout << "请选择!!!"; cin >> k; int m, n; cout << "请输入迷宫的行数,列数:"; cin >> m >> n; Maze maze(m, n, k); system("cls"); maze.init(); maze.Manual(); gotoxy(N + 25, 7); cout << "出口和入口行数和列数需加1 \n"; gotoxy(N + 25, 8); cout << "请输入入口位置(行数,列数):"; cin.sync(); gotoxy(N + 25, 9); cin >> begin.x >> begin.y; gotoxy(N + 25, 13); cout << "请输入出口位置(行数,列数):"; gotoxy(N + 25, 14); cin >> end.x >> end.y; bool l; gotoxy(N + 25, 16); cout << "是否想看走迷宫过程?0否1是!"; gotoxy(N + 25, 17); cin >> l ; if (maze.MazePath(begin, end, l)) { if (!l) gotoxy(0, N + 25); cout << "此迷宫从入口到出口的一条路径如下:" << endl; maze.init(); } else { if (!l) gotoxy(0, N + 25); cout << "此迷宫没有从入口到出口的路径" << endl; } cin.sync(); system("pause"); } }

c语言走迷宫问题提问!

每次移动只能朝东南西北四个方向移动(上北下南左西右东),每次移动一个格子。 如果要碰到墙或者要走出边界了就会停留在原地 第一行两个正整数N,M表示迷宫大小。 接下来N行,每行M个字符,这个N*M表示迷宫的初始状态。 其中'.'表示迷宫的普通格子,'#'表示墙,'S'表示人 之后每一行一个大写字母,表示移动方向。方向序列直到输入结束。 其中'E','W','S','N'分别表示朝东、西、南、北移动。 测试数据保证N,M<=100,'S'在迷宫中有且只有一个,移动次数<=100。 针对每一个移动方向输出一个N*M的矩阵并在输出结束后输出一个空行,表示迷宫的当前状况! ``` #include <stdio.h> #include <stdlib.h> int main() { int n,m,x,y,i; scanf("%d%d",&n,&m); char **a=(char**)malloc(n*sizeof(char*)); for(i=0;i<n;i++) a[i]=(char*)malloc(m*sizeof(char)); int j; for(i=0;i<n;i++) {for(j=0;j<m;j++) scanf("%c",&a[i][j]); if(a[i][j]=='S') x=i; y=j; } char t[100],k; int l; for(i=0;i<100;i++) { scanf("%c",&t[i]); if(t[i]=='\r') {l=i; break; } } for(i=0;i<k;i++) { k=t[i]; switch(k) { case 'E':{if((y+1<=m)&&(a[x][y+1]='.')) { char u; u=a[x][y]; a[x][y]=a[x][y+1]; a[x][y+1]=u; } for(i=0;i<n;i++) {for(j=0;j<m;j++) printf("%c",a[i][j]); printf("\n"); } y=y+1; break; } case 'W':{ if((y-1>=0)&&(a[x][y-1]='.')) { char u; u=a[x][y]; a[x][y]=a[x][y-1]; a[x][y-1]=u; } for(i=0;i<n;i++) {for(j=0;j<m;j++) printf("%c",a[i][j]); printf("\n"); } y=y-1; break; } case 'N':{ if((x-1>=0)&&(a[x-1][y]='.')) { char u; u=a[x][y]; a[x][y]=a[x-1][y]; a[x-1][y]=u; } for(i=0;i<n;i++) {for(j=0;j<m;j++) printf("%c",a[i][j]); printf("\n"); } x=x-1; break; } case 'S':{ if((x+1<=n)&&(a[x+1][y]='.')) { char u; u=a[x][y]; a[x][y]=a[x+1][y]; a[x+1][y]=u; } for(i=0;i<n;i++) {for(j=0;j<m;j++) printf("%c",a[i][j]); printf("\n"); } x=x+1; break; } } } return 0; ``` 不知道哪里出错了,有人能帮我改改吗。。

广度优先搜索怎么实现

一幅有向图,每个点对应一定数量邻节点,现在我想保存一层到n层所有节点和路径(n<8).该怎么写

一段代码,迷宫问题,求大神加注释

maze::maze() { int i,j; cout<<"请输入迷宫规模,长、宽,以空格隔开:"; cin>>Height>>Width; a = new int*[Height]; for(i = 0;i != Height;i++) { a[i] = new int[Width]; } rd = new Road*[Height*Width]; Road *temp = new Road[Height*Width]; cout<<"请输入迷宫矩阵:"; cout<<endl; for(i = 0;i != Height;i++) { for(j = 0;j != Width;j++) { cin>>a[i][j]; rd[(j+1)+i*Width-1] = &temp[(j+1)+i*Width-1]; rd[(j+1)+i*Width-1]->state = a[i][j]; rd[(j+1)+i*Width-1]->num = (j+1)+i*Width-1; //cout<<rd[(j+1)+i*n-1]->state; } } for(i = 0;i != Height;i++) { for(j = 0;j != Width;j++) { if(i == 0) { if(j == 0) { rd[(j+1)+i*Width-1]->N = NULL; rd[(j+1)+i*Width-1]->S = rd[(j+1)+(i+1)*Width-1]; rd[(j+1)+i*Width-1]->W = NULL; rd[(j+1)+i*Width-1]->E = rd[(j+1+1)+i*Width-1]; } else if(j == Width-1) { rd[(j+1)+i*Width-1]->N = NULL; rd[(j+1)+i*Width-1]->S = rd[(j+1)+(i+1)*Width-1]; rd[(j+1)+i*Width-1]->W = rd[(j-1+1)+i*Width-1]; rd[(j+1)+i*Width-1]->E = NULL; } else { rd[(j+1)+i*Width-1]->N = NULL; rd[(j+1)+i*Width-1]->S = rd[(j+1)+(i+1)*Width-1]; rd[(j+1)+i*Width-1]->W = rd[(j-1+1)+i*Width-1]; rd[(j+1)+i*Width-1]->E = rd[(j+1+1)+i*Width-1]; } } else if(i == (Height-1)) { if(j == 0) { rd[(j+1)+i*Width-1]->N = rd[(j+1)+(i-1)*Width-1]; rd[(j+1)+i*Width-1]->S = NULL; rd[(j+1)+i*Width-1]->W = NULL; rd[(j+1)+i*Width-1]->E = rd[(j+1+1)+i*Width-1]; } else if(j == Width-1) { rd[(j+1)+i*Width-1]->N = rd[(j+1)+(i-1)*Width-1]; rd[(j+1)+i*Width-1]->S = NULL; rd[(j+1)+i*Width-1]->W = rd[(j-1+1)+i*Width-1]; rd[(j+1)+i*Width-1]->E = NULL; } else { rd[(j+1)+i*Width-1]->N = rd[(j+1)+(i-1)*Width-1]; rd[(j+1)+i*Width-1]->S = NULL; rd[(j+1)+i*Width-1]->W = rd[(j-1+1)+i*Width-1]; rd[(j+1)+i*Width-1]->E = rd[(j+1+1)+i*Width-1]; } } else { if(j == 0) { rd[(j+1)+i*Width-1]->N = rd[(j+1)+(i-1)*Width-1]; rd[(j+1)+i*Width-1]->S = rd[(j+1)+(i+1)*Width-1]; rd[(j+1)+i*Width-1]->W = NULL; rd[(j+1)+i*Width-1]->E = rd[(j+1+1)+i*Width-1]; } else if(j == Width-1) { rd[(j+1)+i*Width-1]->N = rd[(j+1)+(i-1)*Width-1]; rd[(j+1)+i*Width-1]->S = rd[(j+1)+(i+1)*Width-1]; rd[(j+1)+i*Width-1]->W = rd[(j-1+1)+i*Width-1]; rd[(j+1)+i*Width-1]->E = NULL; } else { rd[(j+1)+i*Width-1]->N = rd[(j+1)+(i-1)*Width-1]; rd[(j+1)+i*Width-1]->S = rd[(j+1)+(i+1)*Width-1]; rd[(j+1)+i*Width-1]->W = rd[(j-1+1)+i*Width-1]; rd[(j+1)+i*Width-1]->E = rd[(j+1+1)+i*Width-1]; } } } } cout<<"迷宫矩阵:"<<endl; for(i = 0;i != Height;i++) { for(j = 0;j != Width;j++) { cout<<a[i][j]<<"\t"; } cout<<endl; } cout<<endl; cout<<"迷宫节点序号矩阵:"<<endl; for(i = 0;i != Height;i++) { for(j = 0;j != Width;j++) { cout<<rd[(j+1)+i*Width-1]->num<<"\t"; } cout<<endl; } cout<<endl; cout<<"请输入入口序号:"; cin>>innum; cout<<"请输入出口序号:"; cin>>outnum; if(rd[innum]->state == 0) { if(getout(rd[innum]->num)>0) { cout<<rd[innum]->num<<"<--进入"<<endl; } else { cout<<"没有出口!"<<endl; } } else { cout<<"没有此入口!"<<endl; } } int maze::getout(int num) //shendu { rd[num]->flog = 1; if(num == outnum) { cout<<"出口<--"; return 1; } else if(rd[num]->N != NULL && rd[num]->N->state == 0 && rd[num]->N->flog != 1 && getout(rd[num]->N->num)>0) { cout<<rd[num]->N->num<<"<--"; return rd[num]->N->num; } else if(rd[num]->S != NULL && rd[num]->S->state == 0 && rd[num]->S->flog != 1 && getout(rd[num]->S->num)>0) { cout<<rd[num]->S->num<<"<--"; return rd[num]->S->num; } else if(rd[num]->W != NULL && rd[num]->W->state == 0 && rd[num]->W->flog != 1 && getout(rd[num]->W->num)>0) { cout<<rd[num]->W->num<<"<--"; return rd[num]->W->num; } else if(rd[num]->E != NULL && rd[num]->E->state == 0 && rd[num]->E->flog != 1 && getout(rd[num]->E->num)>0) { cout<<rd[num]->E->num<<"<--"; return rd[num]->E->num; } else { return -1; } }

C++ 迷宫问题,代码运行除了正确结果却提示出错

代码如下: ``` #include<iostream> using namespace std; int main() { //矩阵初始化 int **migong; int h, w; int m, n; cout << "请输入迷宫高度h和迷宫宽度w:" << endl; cin >> h >> w; migong = new int *[h]; for (int i = 0; i < h ; i++) { migong[i] = new int[w]; } for (m = 0; m < h ; m++) { for (n = 0; n < w ; n++) { cin>>migong[m][n] ; } } //输出矩阵 for (m = 0; m < h; m++) { for (n = 0; n < w; n++) { cout << migong[m][n] << " "; } cout << endl; } int temp = 0; if (h >= w) temp = h; else temp = w; int *path_row = new int;//通行路径的行 int *path_column = new int;//通行路径的列 for (int i = 0; i < temp; i++) path_row[i] = path_column[i] = 0; int row = 0; int column = 0; int count = 0; do { column = 0; do { switch (migong[row][column]) { case 3: cout << "入口坐标为:" << "(" << row << "," << column << ")" << endl; } switch (migong[row][column]) { case 0: path_row[count] = row; path_column[count] = column; cout << "(" << row << "," << column << ")" << endl; count++; break; case 1: break; } switch (migong[row][column]) { case 4: cout << "出口坐标为:" << "(" << row << "," << column << ")" << endl; } column += 1; } while (column < w); row += 1; }while (row < h); for (m = 0; m < h ; m++) { delete[] migong[m]; } delete migong; delete path_row; delete path_column; system("pause"); return 0; } ``` 麻烦各位大神看看是哪儿出错了

这是一个迷宫求解问题

/*如果迷宫有通道可解则正常运行,迷宫不可解为什么显示exe停止工作呢?怎样修改呢?*/ #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define COLUMN 10 #define ROW 10 typedef int Status; typedef struct{ char **maze; int **footprint; int row; int column; }MazeType; typedef struct{ int x; int y; }PosType; typedef struct{ int ord; PosType seat; int di; }SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(SqStack *S); Status InitMaze(MazeType *M); Status DestroyStack(SqStack *S); Status ClearStack(SqStack *S); Status StackEmpty(SqStack S); int StackLength(SqStack S); Status GetTop(SqStack S,SElemType *e); Status Push(SqStack *S,SElemType e); Status Pop(SqStack *S,SElemType *e); Status StackTraverse(const SqStack *S); Status PrintMaze(MazeType *M); Status MazePath(SqStack *S,MazeType maze,PosType start,PosType end); Status FootPrint(MazeType *M,PosType pos); Status Pass(MazeType *M,PosType pos); SElemType NewSElem(int step,PosType pos,int d); PosType NextPos(PosType pos,int d); Status MarkPrint(MazeType *M,PosType pos); Status PrintFoot(MazeType *M,SqStack *S); int main() { MazeType maze; SqStack stack; PosType start,end; start.x=0;start.y=1; end.x=8;end.y=9; InitMaze(&maze); printf("迷宫形状:\n"); PrintMaze(&maze); if(TRUE==MazePath(&stack,maze,start,end)) printf("迷宫可解.\n"); else printf("迷宫不可解.\n"); return 0; } Status InitStack(SqStack *S){ //构造一个空栈S S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->base)//分配失败 { printf("分配内存失败.\n"); exit(0); } S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK; } Status InitMaze(MazeType *M){ //初始化迷宫数据 int i,j; char mz[ROW][COLUMN]={ //mz新定义的二维数组 '#',' ',' ','#','#','#','#','#','#','#',//每行十个 '#','#','#','#',' ',' ',' ','#',' ','#', '#',' ',' ','#',' ',' ',' ','#',' ','#', '#',' ',' ',' ',' ','#','#',' ',' ','#', '#',' ','#','#','#',' ',' ',' ',' ','#', '#',' ',' ',' ','#',' ','#',' ','#','#', '#',' ','#',' ',' ',' ','#',' ',' ','#', '#',' ','#','#','#',' ','#','#',' ','#', '#','#',' ',' ',' ',' ',' ',' ',' ',' ', '#','#','#','#','#','#','#','#','#','#' }; M->maze=(char **)malloc(sizeof(char *)*ROW); M->footprint=(int **)malloc(sizeof(int *)*ROW); if(!M->maze||!M->footprint){ printf("申请空间失败,迷宫无法初始化.\n"); return ERROR; exit(0); } for(i=0;i<ROW;i++){ M->maze[i]=(char *)malloc(sizeof(char)*COLUMN); M->footprint[i]=(int *)malloc(sizeof(int)*COLUMN); if(!M->maze[i]||!M->footprint[i]){ printf("申请空间失败,迷宫初始化失败.\n"); return ERROR; exit(0); } } for(i=0;i<ROW;i++){ for(j=0;j<COLUMN;j++){ M->maze[i][j]=mz[i][j]; M->footprint[i][j]=0; } } M->row=ROW; M->column=COLUMN; return OK; } Status DestroyStack(SqStack *S){ if(!S) { printf("指针为空,释放失败.\n"); exit(0); } free(S); return OK; } Status ClearStack(SqStack *S){ if(!S) return FALSE; S->top=S->base; return OK; } Status StackEmpty(SqStack S){ if(S.top==S.base) return TRUE; else return FALSE; } int StackLength(SqStack S){ return S.stacksize; } Status GetTop(SqStack S,SElemType *e){ if(S.top==S.base){ printf("栈为空.\n"); return FALSE; }else{ *e=*(S.top-1); printf("栈顶元素:%c\n",*e); return OK; } } Status Push(SqStack *S,SElemType e){ if(S->top-S->base>=S->stacksize){ S->base=(SElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->base) { printf("重新申请空间失败.\n"); exit(0); } S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return OK; } Status Pop(SqStack *S,SElemType *e){ if(S->top==S->base){//栈为空 printf("栈为空.\n"); return ERROR; } *e=*(--S->top); return OK; } Status StackTraverse(const SqStack *S){ //从栈底到栈顶依次对每个元素进行访问 SElemType *p=S->base; if(S->base==S->top) { printf("栈为空.\n"); return FALSE; } printf("栈中元素:"); while(p!=S->top) { printf("x=%d,y=%d\n",p->seat.x,p->seat.y); *p++; } printf("\n"); return OK; } Status PrintMaze(MazeType *M){ //输出迷宫 int i,j; for(i=0;i<M->row;i++){ for(j=0;j<M->column;j++){ printf("%c",M->maze[i][j]); } printf("\n"); } printf("\n"); return OK; } Status PrintFoot(MazeType *M,SqStack *S){ //输出迷宫的路径 int i,j; SElemType *p; for(i=0;i<M->row;i++){ for(j=0;j<M->column;j++){ M->footprint[i][j]=0; } } p=S->base; if(S->base==S->top) { printf("栈为空.\n"); return FALSE; } while(p!=S->top) { M->footprint[p->seat.x][p->seat.y]=1; *p++; } for(i=0;i<M->row;i++){ for(j=0;j<M->column;j++){ printf("%d",M->footprint[i][j]); } printf("\n"); } return OK; } Status MazePath(SqStack *S,MazeType maze,PosType start,PosType end){ int curstep=1;//当前步数 SElemType e; PosType curpos=start;//当前位置 InitStack(S);//初始化栈 do{ if(TRUE==Pass(&maze,curpos)){ FootPrint(&maze,curpos); e=NewSElem(curstep,curpos,1); Push(S,e); if((curpos.x==end.x)&&(curpos.y==end.y)){//到达终点(出口) printf("迷宫路径:\n"); //StackTraverse(S); PrintFoot(&maze,S); return TRUE; } curpos=NextPos(curpos,1); curstep++; }//if else{//当前位置不能通过 if(!StackEmpty(*S)){ Pop(S,&e); while(e.di==4&&!StackEmpty(*S)){ MarkPrint(&maze,e.seat); Pop(S,&e); }//while if(e.di<4){ e.di++; Push(S,e); curpos=NextPos(e.seat,e.di); }//if }//if }//else //PrintFoot(&maze,S); }while(!StackEmpty(*S));//一直循环到栈空为止 return FALSE; } Status FootPrint(MazeType *M,PosType pos){ //将迷宫的当前位置pos设置为"走过",即footprint该位置为1 if((pos.x>M->row)||(pos.y>M->column))//检验大小 return FALSE; M->footprint[pos.x][pos.y]=1;//如果不满足条件,开始运行下一步 return TRUE; } Status Pass(MazeType *M,PosType pos){ //判断当前位置是否可通,即为走过的通道块 if((M->row<pos.x)||(M->column<pos.y)){ printf("位置越位.\n"); exit(0); } if((0==M->footprint[pos.x][pos.y])&&(M->maze[pos.x][pos.y]==' ')) return TRUE; else return FALSE; } SElemType NewSElem(int step,PosType pos,int d){ //创建新结点,用step,pos,d初始化该结点 SElemType e; e.ord=step; e.seat=pos; e.di=d; return e;//下一步 } PosType NextPos(PosType pos,int d){ //获取pos位置d方向的位置 switch(d){ case 1://东 pos.x++; break; case 2://南 pos.y++; break; case 3://西 pos.x--; break; case 4://北 pos.y--; break; default: printf("位置编号出错.\n"); }//利用坐标左西右东上北下南 return pos; } Status MarkPrint(MazeType *M,PosType pos){ //将迷宫M的pos位置,设为已走,成功返回OK;否则返回ERROR if(pos.x>M->row||pos.y>M->column){ printf("所要标记位置越位.\n"); return ERROR; } M->footprint[pos.x][pos.y]=1; return OK; }

这个迷宫求解代码当迷宫无通路时显示停止运行,劳烦哪个大神帮我看看代码哪里错了?

/*如果迷宫有通道可解则正常运行,迷宫不可解为什么显示exe停止工作呢?怎样修改呢?*/ #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define COLUMN 10 #define ROW 10 typedef int Status; typedef struct{ char **maze; int **footprint; int row; int column; }MazeType; typedef struct{ int x; int y; }PosType; typedef struct{ int ord; PosType seat; int di; }SElemType; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(SqStack *S); Status InitMaze(MazeType *M); Status DestroyStack(SqStack *S); Status ClearStack(SqStack *S); Status StackEmpty(SqStack S); int StackLength(SqStack S); Status GetTop(SqStack S,SElemType *e); Status Push(SqStack *S,SElemType e); Status Pop(SqStack *S,SElemType *e); Status StackTraverse(const SqStack *S); Status PrintMaze(MazeType *M); Status MazePath(SqStack *S,MazeType maze,PosType start,PosType end); Status FootPrint(MazeType *M,PosType pos); Status Pass(MazeType *M,PosType pos); SElemType NewSElem(int step,PosType pos,int d); PosType NextPos(PosType pos,int d); Status MarkPrint(MazeType *M,PosType pos); Status PrintFoot(MazeType *M,SqStack *S); int main() { MazeType maze; SqStack stack; PosType start,end; start.x=0;start.y=1; end.x=8;end.y=9; InitMaze(&maze); printf("迷宫形状:\n"); PrintMaze(&maze); if(TRUE==MazePath(&stack,maze,start,end)) printf("迷宫可解.\n"); else printf("迷宫不可解.\n"); return 0; } Status InitStack(SqStack *S){ //构造一个空栈S S->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S->base)//分配失败 { printf("分配内存失败.\n"); exit(0); } S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK; } Status InitMaze(MazeType M){ //初始化迷宫数据 int i,j; char mz[ROW][COLUMN]={ //mz新定义的二维数组 '#',' ',' ','#','#','#','#','#','#','#',//每行十个 '#','#','#','#',' ',' ',' ','#',' ','#', '#',' ',' ','#',' ',' ',' ','#',' ','#', '#',' ',' ',' ',' ','#','#',' ',' ','#', '#',' ','#','#','#',' ',' ',' ',' ','#', '#',' ',' ',' ','#',' ','#',' ','#','#', '#',' ','#',' ',' ',' ','#',' ',' ','#', '#',' ','#','#','#',' ','#','#',' ','#', '#','#',' ',' ',' ',' ',' ',' ',' ',' ', '#','#','#','#','#','#','#','#','#','#' }; M->maze=(char *)malloc(sizeof(char )*ROW); M->footprint=(int *)malloc(sizeof(int *)*ROW); if(!M->maze||!M->footprint){ printf("申请空间失败,迷宫无法初始化.\n"); return ERROR; exit(0); } for(i=0;i M->maze[i]=(char *)malloc(sizeof(char)*COLUMN); M->footprint[i]=(int *)malloc(sizeof(int)*COLUMN); if(!M->maze[i]||!M->footprint[i]){ printf("申请空间失败,迷宫初始化失败.\n"); return ERROR; exit(0); } } for(i=0;i for(j=0;j M->maze[i][j]=mz[i][j]; M->footprint[i][j]=0; } } M->row=ROW; M->column=COLUMN; return OK; } Status DestroyStack(SqStack *S){ if(!S) { printf("指针为空,释放失败.\n"); exit(0); } free(S); return OK; } Status ClearStack(SqStack *S){ if(!S) return FALSE; S->top=S->base; return OK; } Status StackEmpty(SqStack S){ if(S.top==S.base) return TRUE; else return FALSE; } int StackLength(SqStack S){ return S.stacksize; } Status GetTop(SqStack S,SElemType *e){ if(S.top==S.base){ printf("栈为空.\n"); return FALSE; }else{ *e=*(S.top-1); printf("栈顶元素:%c\n",*e); return OK; } } Status Push(SqStack *S,SElemType e){ if(S->top-S->base>=S->stacksize){ S->base=(SElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S->base) { printf("重新申请空间失败.\n"); exit(0); } S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return OK; } Status Pop(SqStack *S,SElemType *e){ if(S->top==S->base){//栈为空 printf("栈为空.\n"); return ERROR; } *e=*(--S->top); return OK; } Status StackTraverse(const SqStack *S){ //从栈底到栈顶依次对每个元素进行访问 SElemType *p=S->base; if(S->base==S->top) { printf("栈为空.\n"); return FALSE; } printf("栈中元素:"); while(p!=S->top) { printf("x=%d,y=%d\n",p->seat.x,p->seat.y); *p++; } printf("\n"); return OK; } Status PrintMaze(MazeType *M){ //输出迷宫 int i,j; for(i=0;irow;i++){ for(j=0;jcolumn;j++){ printf("%c",M->maze[i][j]); } printf("\n"); } printf("\n"); return OK; } Status PrintFoot(MazeType *M,SqStack *S){ //输出迷宫的路径 int i,j; SElemType *p; for(i=0;irow;i++){ for(j=0;jcolumn;j++){ M->footprint[i][j]=0; } } p=S->base; if(S->base==S->top) { printf("栈为空.\n"); return FALSE; } while(p!=S->top) { M->footprint[p->seat.x][p->seat.y]=1; *p++; } for(i=0;irow;i++){ for(j=0;jcolumn;j++){ printf("%d",M->footprint[i][j]); } printf("\n"); } return OK; } Status MazePath(SqStack *S,MazeType maze,PosType start,PosType end){ int curstep=1;//当前步数 SElemType e; PosType curpos=start;//当前位置 InitStack(S);//初始化栈 do{ if(TRUE==Pass(&maze,curpos)){ FootPrint(&maze,curpos); e=NewSElem(curstep,curpos,1); Push(S,e); if((curpos.x==end.x)&&(curpos.y==end.y)){//到达终点(出口) printf("迷宫路径:\n"); //StackTraverse(S); PrintFoot(&maze,S); return TRUE; } curpos=NextPos(curpos,1); curstep++; }//if else{//当前位置不能通过 if(!StackEmpty(*S)){ Pop(S,&e); while(e.di==4&&!StackEmpty(*S)){ MarkPrint(&maze,e.seat); Pop(S,&e); }//while if(e.di<4){ e.di++; Push(S,e); curpos=NextPos(e.seat,e.di); }//if }//if }//else //PrintFoot(&maze,S); }while(!StackEmpty(*S));//一直循环到栈空为止 return FALSE; } Status FootPrint(MazeType *M,PosType pos){ //将迷宫的当前位置pos设置为"走过",即footprint该位置为1 if((pos.x>M->row)||(pos.y>M->column))//检验大小 return FALSE; M->footprint[pos.x][pos.y]=1;//如果不满足条件,开始运行下一步 return TRUE; } Status Pass(MazeType *M,PosType pos){ //判断当前位置是否可通,即为走过的通道块 if((M->rowcolumn printf("位置越位.\n"); exit(0); } if((0==M->footprint[pos.x][pos.y])&&(M->maze[pos.x][pos.y]==' ')) return TRUE; else return FALSE; } SElemType NewSElem(int step,PosType pos,int d){ //创建新结点,用step,pos,d初始化该结点 SElemType e; e.ord=step; e.seat=pos; e.di=d; return e;//下一步 } PosType NextPos(PosType pos,int d){ //获取pos位置d方向的位置 switch(d){ case 1://东 pos.x++; break; case 2://南 pos.y++; break; case 3://西 pos.x--; break; case 4://北 pos.y--; break; default: printf("位置编号出错.\n"); }//利用坐标左西右东上北下南 return pos; } Status MarkPrint(MazeType *M,PosType pos){ //将迷宫M的pos位置,设为已走,成功返回OK;否则返回ERROR if(pos.x>M->row||pos.y>M->column){ printf("所要标记位置越位.\n"); return ERROR; } M->footprint[pos.x][pos.y]=1; return OK; }

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

navicat(内含激活码)

navicat支持mysql的可视化操作,内涵激活码,不用再忍受弹框的痛苦。

HTML期末大作业

这是我自己做的HTML期末大作业,花了很多时间,稍加修改就可以作为自己的作业了,而且也可以作为学习参考

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

基于STM32的电子时钟设计

时钟功能 还有闹钟功能,温湿度功能,整点报时功能 你值得拥有

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:itxy41)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

零基础学C#编程—C#从小白到大咖

本课程从初学者角度出发,提供了C#从入门到成为程序开发高手所需要掌握的各方面知识和技术。 【课程特点】 1 由浅入深,编排合理; 2 视频讲解,精彩详尽; 3 丰富实例,轻松易学; 4 每章总结配有难点解析文档。 15大章节,228课时,1756分钟与你一同进步!

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

想学好JAVA必须要报两万的培训班吗? Java大神勿入 如果你: 零基础想学JAVA却不知道从何入手 看了一堆书和视频却还是连JAVA的环境都搭建不起来 囊中羞涩面对两万起的JAVA培训班不忍直视 在职没有每天大块的时间专门学习JAVA 那么恭喜你找到组织了,在这里有: 1. 一群志同道合立志学好JAVA的同学一起学习讨论JAVA 2. 灵活机动的学习时间完成特定学习任务+每日编程实战练习 3. 热心助人的助教和讲师及时帮你解决问题,不按时完成作业小心助教老师的家访哦 上一张图看看前辈的感悟: &nbsp; &nbsp; 大家一定迫不及待想知道什么是极简JAVA学习营了吧,下面就来给大家说道说道: 什么是极简JAVA学习营? 1. 针对Java小白或者初级Java学习者; 2. 利用9天时间,每天1个小时时间; 3.通过 每日作业 / 组队PK / 助教答疑 / 实战编程 / 项目答辩 / 社群讨论 / 趣味知识抢答等方式让学员爱上学习编程 , 最终实现能独立开发一个基于控制台的‘库存管理系统’ 的学习模式 极简JAVA学习营是怎么学习的? &nbsp; 如何报名? 只要购买了极简JAVA一:JAVA入门就算报名成功! &nbsp;本期为第四期极简JAVA学习营,我们来看看往期学员的学习状态: 作业看这里~ &nbsp; 助教的作业报告是不是很专业 不交作业打屁屁 助教答疑是不是很用心 &nbsp; 有奖抢答大家玩的很嗨啊 &nbsp; &nbsp; 项目答辩终于开始啦 &nbsp; 优秀者的获奖感言 &nbsp; 这是答辩项目的效果 &nbsp; &nbsp; 这么细致的服务,这么好的氛围,这样的学习效果,需要多少钱呢? 不要1999,不要199,不要99,只要9.9 是的你没听错,只要9.9以上所有就都属于你了 如果你: 1、&nbsp;想学JAVA没有基础 2、&nbsp;想学JAVA没有整块的时间 3、&nbsp;想学JAVA没有足够的预算 还等什么?赶紧报名吧,抓紧抢位,本期只招300人,错过只有等时间待定的下一期了 &nbsp; 报名请加小助手微信:eduxy-1 &nbsp; &nbsp;

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

机器学习实战系列套餐(必备基础+经典算法+案例实战)

机器学习实战系列套餐以实战为出发点,帮助同学们快速掌握机器学习领域必备经典算法原理并结合Python工具包进行实战应用。建议学习顺序:1.Python必备工具包:掌握实战工具 2.机器学习算法与实战应用:数学原理与应用方法都是必备技能 3.数据挖掘实战:通过真实数据集进行项目实战。按照下列课程顺序学习即可! 课程风格通俗易懂,用最接地气的方式带领大家轻松进军机器学习!提供所有课程代码,PPT与实战数据,有任何问题欢迎随时与我讨论。

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

相关热词 c# 局部 截图 页面 c#实现简单的文件管理器 c# where c# 取文件夹路径 c# 对比 当天 c# fir 滤波器 c# 和站 队列 c# txt 去空格 c#移除其他类事件 c# 自动截屏
立即提问