一、迷宫

#include<vector>
#include<cstring>
using namespace std;
int m,n; /*m 行,n 列*/
vector<pair<int,int>> dirc;
/*存储1,0 的二维数组*/
int arr[11][11]={0};
/*存储标记的二维数组*/
int tab[11][11]={0};
/*定义四个方向的坐标用于上下左右移动*/
int dir[4][2]={{0,1},/*左移*/
               {0,-1},/*右移*/
               {1,0},/*下移*/
               {-1,0}/*上移*/

};
bool dfs(int x,int y){
    int p,q;/*p 行 q 列*/
    if(x==m-1 && y==n-1){
        return true;
    }
    for(int i=0;i<4;i++){
        p=x+dir[i][0];
        q=y+dir[i][1];
        if(p>=0 && p<m && q>=0 && q<n){
            if(arr[p][q]==0 && tab[p][q]==0){
                tab[p][q]=1;
                if(dfs(p,q)){
                    dirc.push_back(make_pair(p,q));
                    return true;
                }
            }
        }
    }
    return false;
}
int main(void){
    int i,j;
    while(cin>>m>>n){
    /*输入数据*/ 
        for(i=0;i<m;i++){
            for(j=0;j<n;j++){
                cin>>arr[i][j];
            }
        }
    /*递归输出符合的坐标*/
        tab[0][0]=1;
        cout<<"(0,0)"<<endl;
        if(dfs(0,0)==true){
            auto it=dirc.rbegin();
            while(it!=dirc.rend()){
                cout<<"("<<it->first<<","<<it->second<<")"<<endl;
                it++;
            }
        }
        dirc.clear();
        memset(tab,0,sizeof(tab));
    }
    return 0;
}

二、走方格 题目

#include<cstring>
using namespace std;
int arr[10][10];
int tab[10][10]={0};
int dir[2][2]={{0,1},{1,0}};
int n,m  /*n 横 m竖*/;
int num=0; /*总走法*/

void dfs(int x,int y){
    int p,q;
    if(x==n-1 && y==m-1){
        num++;
    }
    for(int i=0;i<2;i++){
        p=x+dir[i][0];
        q=y+dir[i][1];
        if(p<n && q<m){
            if(tab[p][q]==0){
                dfs(p,q);
            }
        }
    }
    return ;
}/*
.  .   .
.  .   .
.  .   .*/
int main(void){
    while(cin>>n>>m){
        n++;
        m++;
        dfs(0,0);
        cout<<num<<endl;
        num=0;
        memset(tab,0,sizeof(tab));
        
    }
    return 0;
}