BFS拐弯次数

Description
wyy是一个著名动画《境界的彼方》的男主,此时他非常的慌张,因为女主栗山未来进入了境界的彼方内部,并且花费了大量的血量去拯救wyy,wyy此时也进入了境界的彼方,他妈给了他一张地图去寻找境界的彼方的核心去拯救女主,现给你一张n×n的地图,以及男主的位置,问男主要拐弯几次才会到达境界的彼方内部(境界的彼方的位置为(n,n))
不过你以为这就是道搜索题?还得加条件:此时女主血条狂掉,你必须判断此时wyy是否可以走到终点且女主的血条不会掉光,如果掉光了那么输出"Die",如果地图无法到达境界的彼方(他妈坑他)就输出"No",如果到得了终点且女主血条活着输出res代表男主此时要拐弯几次

Input
给出n和k和\(x_1\)\(y_1\),k代表每拐弯一次女主要耗掉k滴血, 默认女主有100点血, \(x_1\)\(y_1\)代表男主此时所在的位置

Output
根据题目要求输出

这个题就是有一个坑就是当起点和终点一样的时候,还要注意的是他拐弯的时候掉血不是走一步掉线

#include<iostream>
#include<algorithm>
#include<queue> 
using namespace std;
typedef long long ll; 
const int maxn=3e3+100;
char a[maxn][maxn];
int vis[maxn][maxn];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
struct node{
    int x,y,t;
};
int n,sx,sy,ex,ey;
ll m;
int ans=0x3f3f3f3f;
int f=0;
void BFS(){
    queue<node>q;
    node tmp,nxt;
    tmp.x=sx,tmp.y=sy,tmp.t=-1;//因为第一步不算
    vis[tmp.x][tmp.y]=1;
    q.push(tmp);
    while(!q.empty()){
        tmp=q.front();
        q.pop();
        nxt.t=tmp.t+1;
        for(int i=0;i<4;i++){//相当于拐了一次弯 
            int xx=tmp.x,yy=tmp.y;
            while(1){//把这一个方向的都标记了 
                xx=xx+dx[i],yy=yy+dy[i];
                if(xx<1||xx>n||yy<1||yy>n){
                    break;
                }
                if(a[xx][yy]=='0') break;
                if(vis[xx][yy]) break;
                vis[xx][yy]=1;
                nxt.x=xx,nxt.y=yy;
                if(xx==ex&&yy==ey){
                    f=1;
                    ans=min(ans,nxt.t);
                    return ;
                }
                q.push(nxt);
            }
        }
    } 
}
int main(){
    cin>>n>>m>>sx>>sy;
    ex=ey=n; 
    for(int i=1;i<=n;i++){
        scanf("%s",a[i]+1); 
    }
    if(sx==ex&&sy==ey){
        if(a[sx][ex]=='1'){
            cout<<"0"<<endl;
        }
        else{
            cout<<"No"<<endl;
        }
        return 0;
    }
    BFS();
    if(f==0){
        cout<<"No"<<endl;
        return 0;
    }
    if(100-1ll*m*ans<=0){
        cout<<"Die"<<endl;
    }
    else{
        cout<<ans<<endl;
    }
    
}
posted @ 2021-02-21 00:18  lipu123  阅读(0)  评论(0编辑  收藏  举报