Codeup 5978【递归入门】走迷宫

传送门

思路:

1.用二维数组记录迷宫,从起始点dfs遍历寻找目标点

2.用另一个二维数据记录路径

注意:

1.dfs时要按照左下右上的顺序

2.不能从起始点dfs到目标点要输出-1

附上AC代码:

#include<iostream>
#include<cmath>
using namespace std;
int map[100][100];    //保存迷宫 
int n,m,cnt=0,ex,ey,jud=1;
int res[1000][2];   //记录路径 
int x[4]={0,-1,0,1},y[4]={-1,0,1,0};  //左上右下 
void dfs(int tx,int ty){
    if(tx==ex-1&&ty==ey-1){   //到达目标点 
        jud=0;
        res[cnt][0]=ex;
        res[cnt++][1]=ey;
        for(int i=0;i<cnt;i++){    //格式化输出 
            if(i!=0) cout<<"->";
            cout<<"("<<res[i][0]<<","<<res[i][1]<<")";
        }
        cout<<endl;
        cnt--;
        return;
    }
    for(int i=0;i<4;i++){
        if(tx+x[i]>=0&&tx+x[i]<n&&ty+y[i]>=0&&ty+y[i]<m&&(map[tx+x[i]][ty+y[i]])){
            map[tx][ty]=0;   //标记 
            res[cnt][0]=tx+1;  //记录 
            res[cnt++][1]=ty+1;
            dfs(tx+x[i],ty+y[i]);
            cnt--;          //回溯 
            map[tx][ty]=1;   
        }
    }
}


int main(){
    int sx,sy;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>map[i][j];
        }
    }
    cin>>sx>>sy>>ex>>ey;
    dfs(sx-1,sy-1);
    if(jud) cout<<"-1";
    return 0;
} 

ACM小白,有诸多不足,欢迎指正。

posted @ 2019-08-18 17:36  Anitena  阅读(221)  评论(0)    收藏  举报