回 帖 发 新 帖 刷新版面

主题:大侠帮我分析一下 时间复杂度

迷宫的递归算法代码:
#include<stdafx.h>
#include<windows.h>
#include<stdio.h>
struct PosType /* 迷宫坐标位置类型*/
{
int x; /* 行值*/
int y; /* 列值*/
};
#define MAXLENGTH 25 /* 设迷宫的最大行列为25 */
typedef int MazeType[MAXLENGTH][MAXLENGTH]; /* [行][列] */
/* 全局变量*/
struct PosType end; /* 迷宫终点位置*/
MazeType m=            /* 迷宫数组*/
    {    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
        { 0,-1, 0, 0, 0, 0, 0, 0, 0, 0,},
        { 0,-1, 0, 0, 0, 0,-1,-1, 0, 0,},
        { 0,-1,-1,-1, 0, 0,-1, 0, 0, 0,},
        { 0, 0,-1, 0, 0,-1,-1, 0, 0, 0,},
        { 0, 0,-1,-1, 0,-1, 0, 0, 0, 0,},
        { 0, 0, 0,-1, 0,-1, 0, 0, 0, 0,},
        { 0, 0, 0,-1,-1,-1,-1,-1,-1, 0,},
        { 0, 0, 0, 0, 0, 0, 0, 0,-1, 0,},
        { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
    };
int x,y; /* 迷宫行数,列数*/
/* 定义墙元素值为0,可通过路径为-1,通过路径为足迹*/
void Print(int x,int y)  /* 输出解*/
{    int i,j;
    for(i=0; i<x; i++)
    {
        for(j=0;j<y;j++)
        printf("%3d",m[i][j]);
        printf("\n");
    }
    printf("\n");
}
void Try(struct PosType cur,int curstep)
{    /* 由当前位置cur、当前步骤curstep 试探下一点*/
    int i;
    struct PosType next; /* 下一个位置*/
    struct PosType direc[4]={{0,1},{1,0},{0,-1},{-1,0}}; /* {行增量,列增量} */
    for(i=0;i<=3;i++) /* 依次试探东南西北四个方向*/
     {    next.x=cur.x+direc[i].x;
        next.y=cur.y+direc[i].y;
        if(m[next.x][next.y]==-1) /* 是通路*/
        {    m[next.x][next.y]=2;
            ++curstep;
            if(next.x!=end.x||next.y!=end.y)
 {/* 没到终点*/
                 Try(next,curstep); /* 试探下一点(递归调用) */
               }
            else{
                printf("输出结果:\n");
                Print(x,y); /* 输出结果*/
               }
            m[next.x][next.y]=-1; /* 恢复为通路,试探下一条路*/
                curstep--;
        }
    }
}

void main()
{    DWORD starttime,endtime;
    struct PosType begin;
    int i,j,x1,y1;
    /*printf("请输入迷宫的行数,列数(包括外墙):");
    scanf("%d,%d",&x,&y);
    for(i=0;i<x;i++) /* 定义周边值为0(同墙) */
    /*{
        m[0][i]=0; /* 行周边*/
    /*    m[x-1][i]=0;
    }
    for(j=1;j<y-1;j++)
    {
        m[j][0]=0; /* 列周边*/
    /*    m[j][y-1]=0;
    }
    for(i=1;i<x-1;i++)
    for(j=1;j<y-1;j++)
    m[i][j]=-1; /* 定义通道初值为-1 */
    /*
    printf("请输入迷宫内墙单元数:");
    scanf("%d",&j);
    if(j)
        printf("请依次输入迷宫内墙每个单元的行数,列数:\n");
    for(i=1;i<=j;i++)
    {
        scanf("%d,%d",&x1,&y1);
        m[x1][y1]=0;
    }*/
    starttime=GetTickCount();
    printf("迷宫结构如下:\n");
    x=10;y=10;
    Print(x,y);
    begin.x=1;
    begin.y=1;
    end.x=8;
    end.y=8;
    m[begin.x][begin.y]=1;
    Try(begin,1); /* 由第一步起点试探起*/
    endtime=GetTickCount();
    printf("时间:%ld ms\n",endtime-starttime);
}

回复列表 (共1个回复)

沙发


怎么没人来说说啊 ??????

我来回复

您尚未登录,请登录后再回复。点此登录或注册