问题标题: 酷丁堂 象棋赛马 2085怎么写

1
0

1
已采纳
张裕博
张裕博
初级守护
初级守护

这题用BFS可以AC:

struct coord{
    int x,y,count;///x表示横坐标,y表示纵坐标,count表示行走步数
};

int BFS(int x,int y){
    for(int i=1;i<=100;i++){
        for(int j=1;j<=100;j++){
            used[i][j]=false;
        }
    }
    queue<coord> q;
    q.push(coord{x,y,0});
    used[x][y]=true;
    while(!q.empty()){///判断是否有解
        coord temp =q.front();
        q.pop();
        if(temp.x==1&&temp.y==1)return temp.count;///如果(x,y)=(1,1)就返回最优解
        for(int i=0;i<12;i++){///尝试每种可能
            int nx=temp.x+dir[i][0];
            int ny=temp.y+dir[i][1];///生成新的坐标
            if(!used[nx][ny]&&canJump(nx,ny)){///这里的canJump判断是否越界,杨老师应该可以自己写
                q.push((coord){nx,ny,temp.count+1});///将一种可能性压入队列
                used[nx][ny]=true;
            }
        }
    }
}
///以下主程序不再展出

 

2
张裕博
张裕博
初级守护
初级守护
用BFS,广度优先搜索

 

0
0
0
我要回答