DFS-数组

题目原意:

小哼去解救小哈,地图为矩阵,上面有许多障碍物。求解救小哈的最短路径。


代码:

#include <stdio.h>
int n,m,p,q,min=999999999;
int a[51][51],book[51][51];
void dfs(int x,int y,int step)
{
    int next[4][2]={
        {0,1},//向右走
        {1,0},//向下走
        {0,-1},//向左走
        {-1,0}//向上走
    };
    int tx,ty,k;
    //判断是否到达小哈的位置
    if(x==p&y==p)
    {
        //更新最小值
        if(step<min)
            min=step;
        return;//请注意这里的返回
    }
    //枚举四种走法
    for(k=0;k<=3;k++)
    {
        //计算下一个点的坐标
        tx=x+next[k][0];
        ty=y+next[k][1];
        //判断是否越界
        if(tx<1||tx>n||ty>m||ty<1)
            continue;
        //判断该点是否为障碍物或者已经在路径中
        if(a[tx][ty]==0&&book[tx][ty]==0)
        {
            book[tx][ty]=1;
            dfs(tx,ty,step+1);
            book[tx][ty]=0;
        }
    }
    return ;
}
int main()
{
    int i,j,startx,starty;
    //读入n和m,n为行,m为列
    scanf("%d %d",&n,&m);
    //读入迷宫
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    //读入起点和终点坐标
    scanf("%d %d %d %d",&startx,&starty,&p,&q);
    //从起点开始搜索
    book[startx][startx]=1;//标记起点己经在路径中,防止后面重复走
    //第一个参数是起点的x坐标,第二个参数是起点y坐标,第三个参数是起始步数为0
    dfs(startx,starty,0);
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 参见贪心算法——最短路径Dijkstra算法参见动态规划 目录 0.最短路径问题0.1 最短路径问题描述 0.1....
    王侦阅读 10,362评论 1 9
  • 题目原意: 小哼去解救小哈,地图为矩阵,上面有许多障碍物。求解救小哈的最短路径。 INPUT第一行:两个数据,行数...
    say_no阅读 2,532评论 0 0
  • 题目原意: 小哼去解救小哈,地图为矩阵,上面有许多障碍物。求解救小哈的最短路径。 INPUT第一行:两个数据,行数...
    say_no阅读 1,781评论 0 0
  • 一只赤裸的脚,烤着火,被火烤着 灰堆里的花猫眯着眼,垂着睫 无法言语 一只水壶在旁热得打呼噜,咕噜咕噜 水倒在,不...
    话梅煮酒ccmm阅读 2,507评论 0 1
  • 早起一会的感觉确实不一样,有种时光在手,绰绰有余之感。今天七点起床,慢慢的将时间调整到六点半吧。这样早上七点前就能...
    好涂鸦阅读 897评论 0 0