咕噜小盒 2023-03-31 21:49 采纳率: 25%
浏览 13

DFS走迷宫有多少条路的问题

题目是这样的:

img


现在我不考虑打印路径只计算有多少种路径,为什么总是和答案不太一样?
我的代码是这样的:

#include<stdio.h>
#include<string.h> 
char map[5][3];                       //一般用二维数组处理迷宫的样子 
int d[4][2] = {{-1,0},{0,-1},{1,0},{0,1}}; //这个二维数组用于处理,左、上、右、下。左上角坐标是(0, 0)
int sum=0;
int sx,sy,tx,ty;   //有s的是指起点,有t的是指终点 
void dfs(int x,int y);

int main()
{   
    int i,j,x,y;
//读入迷宫 
    for(i=0;i<5;i++)
       {
           for(j=0;j<3;j++)
               {
                   scanf("%c",&map[i][j]);
                   if(map[i][j]=='@') //找起点(不用另起,只需要在读入迷宫的时候,顺带找)
                    sx=i,sy=j;
                   if(map[i][j]=='*')//找终点
                      tx=i,ty=j;
                   getchar();                //用来清楚缓存 
               }
       }
dfs(sx,sy) ;
printf("总共有%d走法",sum);
 } 
void dfs(int x,int y)
{
    int nx,ny,i,cnt=0;     //nx表示新的x,ny表示新的y。 
//    int p_x[10],p_y[10];     //处理路径问题 ,路径我都记录下来,打不打印是我的事 
    for(i=0;i<4;i++)             //用循环和数组实现左上右下 
       {
           nx=x+d[i][0];
           ny=y+d[i][1];
           if(map[nx][ny]=='*')                               //写递归时可以先想想递归出口是什么 
             {
                 sum++;

            continue;               //和break不一样 ,走下一个方向 ,是最近的那个点再一次左上右下 
                 
           }
        else if(nx>4 || nx<0 || ny <0 || ny>2) //不在地图内 
               continue;
               
           else if(map[nx][ny]=='.')
            {

               map[nx][ny] = '#';     //保存现场。这个点在这次更深的dfs中不能再用,把其当作墙来看 
               //j++;
            dfs(nx,ny);
            map[nx][ny] = '.';     //恢复现场。回溯之后,这个点可以再次用   
        //    j--; 
            } 
       }
    
 } 

代码运行结果如下:

img


答案是只有7种走法,现在我不考虑打印路径只计算有多少种路径,为什么我的是10种走法,哪里的思路和代码不太对?请指出,非常感谢。

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-03-31 22:10
    关注

    你把所有的走法都输出一下,看看是不是和例子的不同,多了什么

    评论

报告相同问题?

问题事件

  • 创建了问题 3月31日

悬赏问题

  • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
  • ¥20 单细胞数据注释时报错
  • ¥20 dify工作流分析sql查询结果
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果
  • ¥15 二维装箱算法、矩形排列算法(相关搜索:二维装箱)
  • ¥20 nrf2401上电之后执行特定任务概率性一直处于最大重发状态
  • ¥15 二分图中俩集合中节点数与连边概率的关系
  • ¥20 wordpress如何限制ip访问频率