1
已解决
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
0
0
0