1 条题解

  • 0
    @ 2023-6-11 12:16:45

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    //路径总数和路径
    int a[100][100],t=0;                 
     //两种移动规则 
    int x[2]={1,0},y[2]={0,1};
    int n,m;
    
    //输出结果 
    void print(int s)
    {
        t++;
        cout<<t<<":";
    	for(int i=1;i<s;i++){
    		cout<<a[i][1]<<","<<a[i][2]<<"->";	
    	}
    	
    	cout<<n<<","<<m<<endl;
    }
    
    //递归回溯 
    void search(int k)
    {
    	//往2个方向走
    	for (int i=0;i<2;i++){ 
    		//判断马不越界
    		if (a[k-1][1]+x[i]>=0&&a[k-1][1]+x[i]<=n 
    		     &&a[k-1][2]+y[i]>=0&&a[k-1][2]+y[i]<=m){
    		     	//保存当前卒的位置
    				a[k][1]=a[k-1][1]+x[i];                              
    				a[k][2]=a[k-1][2]+y[i];
    				if (a[k][1]==n&&a[k][2]==m){
    					print(k);
    				}else{
    					//搜索下一步	
    					search(k+1);
    				} 
    			 
    		}
    	} 
    }
    
    int main(){
    	cin>>n>>m;
    	a[1][1]=1;
    	a[1][2]=1;
    	//从坐标(0,0)开始往右跳第二步
    	search(2); 
    }
    
    
    • 1

    信息

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