1 条题解

  • 0
    @ 2023-6-11 12:17:08

    C++ :

    #include <iostream>
    using namespace std;
     
    char a[150][150];
    int r[150][3];
    int n;
    
    void show(int k){
        for(int i = 1;i < k;i++){
            cout<<"("<<r[i][1]<<","<<r[i][2]<<")->";
        }
         
        cout<<"("<<r[k][1]<<","<<r[k][2]<<")"<<endl;
    }
    
    //从x、y点开始逐步探测 
    void num(int x,int y,int k){
    	r[k][1] = x;
        r[k][2] = y;
        a[x][y] = '1';//探测过的点,设置为不可探测,防止重复的探测 
        
        if(x == n && y == n){
            show(k);
        }else{
            //左、上、右、下探测,且不越界 
            if(y - 1 >= 1 && a[x][y - 1] == '0') num(x,y - 1,k+1);
            if(x - 1 >= 1 && a[x - 1][y] == '0') num(x-1,y,k+1);
            if(y + 1 <= n && a[x][y + 1] == '0') num(x,y + 1,k+1);
            if(x + 1 <= n && a[x + 1][y] == '0') num(x+1,y,k+1);
        }
    } 
     
    int main(){
        int i,j;
        cin>>n;
        //0表示能走,1表示不能走 
        for(i = 1;i <= n;i++){
            for(j = 1;j <= n;j++){
                cin>>a[i][j];
            }
        }
         
        num(1,1,1);
    }
    
    
    • 1

    信息

    ID
    2351
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者