1 条题解

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

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    //棋盘大小及起止位置 
    int n,m,s1,s2,t1,t2;
    int a[10][10];//存放棋盘
    int d[10][10];//到每个位置的最短路径 
    
    //dep:到该点的步数 
    void fun(int x,int y,int dep){
    	//如果走到这个位置的步数比假设的少(也可以防止死循环) 
    	if(dep < d[x][y]){
    		d[x][y] = dep;
    		//八个方向探测
    		if(x-1>=1&&y-2>=1) fun(x-1,y-2,dep+1); 
    		if(x-2>=1&&y-1>=1) fun(x-2,y-1,dep+1);
    		if(x-2>=1&&y+1<=m) fun(x-2,y+1,dep+1);
    		if(x-1>=1&&y+2<=m) fun(x-1,y+2,dep+1);
    		if(x+1<=n&&y+2<=m) fun(x+1,y+2,dep+1);
    		if(x+2<=n&&y+1<=m) fun(x+2,y+1,dep+1);
    		if(x+2<=n&&y-1>=1) fun(x+2,y-1,dep+1);
    		if(x+1<=n&&y-2>=1) fun(x+1,y-2,dep+1); 
    	}	
    }
    
    int main(){
    	cin>>n>>m>>s1>>s2>>t1>>t2;
    	for(int i = 1;i <= n;i++){
    		for(int j = 1;j <= m;j++){
    			d[i][j] = INT_MAX;//先设置为最大 
    		}
    	}
    	fun(s1,s2,0);
    	cout<<d[t1][t2]<<endl;
    }
    
    
    
    • 1

    信息

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