问题标题: 2085怎么写?

2
0

0
0
0
0
徐子宸
徐子宸
中级天翼
中级天翼

 

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;

 

}

 

}

 

}

 

}

 

///以下主程序不再展出

0
0
0
0
0
0
0
0
汪恺恒
汪恺恒
中级启示者
中级启示者

考古大队前来报到

用bfs即可

/*STL版*/
void bfs(){
    memset(f,-1,sizeof(f));
    f[1][1]=0;
    q.push((node){1,1});
    while(!q.empty()){
        node head=q.front();
        q.pop();
        for(int i=1;i<=12;i++){
            int dx=head.x+dir[i][0],dy=head.y+dir[i][1];
            if(dx>=1&&dy>=1&&dx<=100&&dx<=100&&f[dx][dy]==-1){
                f[dx][dy]=f[head.x][head.y]+1;
                q.push((node){dx,dy});
            }
        }
    }
}

 

0
0
0
0
0
0
我要回答