洛谷 1238 走迷宫

在这里插入图片描述

这道题花了我好久好久的时间,就是找不出bug,后来是问了一个朋友,然后两个人看了好一会,才发现,问题是在于,全局变量i和局部变量i 的区别!!!
起初我的I设置成为了全局变量,所以当他结果一次循环之后,就不变了,变成了4,之后再也没有变化,
所以之后的代码怎么都运行不了,实际上需要i变成一个局部变量,所以才能起到循环的作用。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<queue>
using namespace std;
//
int J[20][20];
int Stepx[4]={0,-1,0,1};
int Stepy[4]={-1,0,1,0};
int m,n;
int starx,stary;
int endx,endy;
//创建一个结构体数组来存当前的位置
struct M{
    int numx,numy;
}Pla[4400];
void  DFS(int x,int y,int num){
    //这个dfs就是创建一个步数,然后对于这个步数,进行输出
    Pla[num].numx=x;
    Pla[num].numy=y;
    //printf("???");
   // printf("(%d,%d)->",Pla[1].numx,Pla[1].numy);
    if(x==endx&&y==endy){
        //那就输出
        for(int i=1;i<num;++i)
            printf("(%d,%d)->",Pla[i].numx,Pla[i].numy);
        printf("(%d,%d)\n",Pla[num].numx,Pla[num].numy);
    }
    else{
    for(int i=0;i<4;++i){
        int newx=x+Stepx[i];
        int newy=y+Stepy[i];
        //来一个判断条件,不越界,并且这个地方可以去
        if((newx>=1)&&(newx<=m)&&(newy>=1)&&(newy<=n)&&(J[newx][newy]==1)){
            //没过界,并且可以走,这里有个很重要的点
           J[newx][newy]=0;//以免回头走
          //  printf("%d %d\n",newx,newy);
            DFS(newx,newy,num+1);
            J[newx][newy]=1;//恢复原样

        }
    }
    }
}
int main()
{
    scanf("%d%d",&m,&n);
    //初始化
    memset(J,0,sizeof(J));
    memset(J,0,sizeof(J));
    memset(Pla,0,sizeof(Pla));
    for(int i=1;i<=m;++i)
        for(int j=1;j<=n;++j)
        scanf("%d",&J[i][j]);
     //输入起始点和终点
     scanf("%d%d",&starx,&stary);
    scanf("%d%d",&endx,&endy);
    J[starx][stary]=0;
    DFS(starx,stary,1);

}

发布了88 篇原创文章 · 获赞 5 · 访问量 3541

猜你喜欢

转载自blog.csdn.net/qq_41115379/article/details/105138435