• 简单bfs(hdu2612)


    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #define INF 0x3f3f3f3f
    using namespace std;
    //hdu2612,Y,M不能走
    int s[210][210],lg[210][210],lg1[210][210];
    int n,m;
    struct node
    {
    int x;//hang
    int y;//lie
    }a,b,d[4050];
    int bfs1(int a3,int b3)
    {
    queue<node> q;
    a.x=a3;
    a.y=b3;
    q.push(a);
    while(!(q.empty()))
    {
    a=q.front();
    q.pop();
    b.x=a.x+1,b.y=a.y;
    if(b.x<n&&lg[b.x][b.y]==0&&s[b.x][b.y]==0)
    lg[b.x][b.y]=lg[a.x][a.y]+1,q.push(b);
    b.x=a.x-1,b.y=a.y;
    if(b.x>=0&&lg[b.x][b.y]==0&&s[b.x][b.y]==0)
    lg[b.x][b.y]=lg[a.x][a.y]+1,q.push(b);
    b.x=a.x,b.y=a.y+1;
    if(b.y<m&&lg[b.x][b.y]==0&&s[b.x][b.y]==0)
    lg[b.x][b.y]=lg[a.x][a.y]+1,q.push(b);
    b.x=a.x,b.y=a.y-1;
    if(b.y>=0&&lg[b.x][b.y]==0&&s[b.x][b.y]==0)
    lg[b.x][b.y]=lg[a.x][a.y]+1,q.push(b);
    }
    return 0;
    }
    int bfs2(int a4,int b4)
    {
    queue<node> q;
    a.x=a4;
    a.y=b4;
    q.push(a);
    while(!(q.empty()))
    {
    a=q.front();
    q.pop();
    b.x=a.x+1,b.y=a.y;
    if(b.x<n&&lg1[b.x][b.y]==0&&s[b.x][b.y]==0)
    lg1[b.x][b.y]=lg1[a.x][a.y]+1,q.push(b);
    b.x=a.x-1,b.y=a.y;
    if(b.x>=0&&lg1[b.x][b.y]==0&&s[b.x][b.y]==0)
    lg1[b.x][b.y]=lg1[a.x][a.y]+1,q.push(b);
    b.x=a.x,b.y=a.y+1;
    if(b.y<m&&lg1[b.x][b.y]==0&&s[b.x][b.y]==0)
    lg1[b.x][b.y]=lg1[a.x][a.y]+1,q.push(b);
    b.x=a.x,b.y=a.y-1;
    if(b.y>=0&&lg1[b.x][b.y]==0&&s[b.x][b.y]==0)
    lg1[b.x][b.y]=lg1[a.x][a.y]+1,q.push(b);
    }
    return 0;
    }
    int main()
    {

    int a1,b1,a2,b2;
    int min;
    int i,j,k;
    char c;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
    memset(lg,0,sizeof(lg));
    memset(lg1,0,sizeof(lg1));
    memset(s,0,sizeof(s));
    a1=a2=b1=b2=0;
    k=0;
    for(i=0;i<n;i++)
    {
    getchar();
    for(j=0;j<m;j++)
    {
    scanf("%c",&c);
    if(c=='Y')
    a1=i,b1=j,s[i][j]=1;
    else if(c=='M')
    a2=i,b2=j,s[i][j]=1;
    else if(c=='@')
    {
    d[k].x=i;
    d[k].y=j;
    k++;
    }
    else if(c=='#')
    s[i][j]=1;
    }
    }
    min=INF;
    bfs1(a1,b1);
    bfs2(a2,b2);
    for(i=0;i<k;i++)
    {
    //printf("%d %d ",lg[d[i].x][d[i].y],lg1[d[i].x][d[i].y]);
    if(lg[d[i].x][d[i].y]+lg1[d[i].x][d[i].y]<min&&lg[d[i].x][d[i].y]!=0&&lg1[d[i].x][d[i].y]!=0)//小心Y或M到不了@的情况
    min=lg[d[i].x][d[i].y]+lg1[d[i].x][d[i].y];
    }
    min=min*11;
    printf("%d ",min);
    }
    return 0;
    }

  • 相关阅读:
    AES算法,DES算法,RSA算法JAVA实现
    spring官方学习地址
    逐步理解SpringMVC
    sublime前端开发工具常用技巧
    谈谈关键字new
    关于mybatisgenerator的问题
    AOPjdk动态代理的思考
    关于java解析xml文件出现的问题
    Java注解
    git向码云上传代码总结
  • 原文地址:https://www.cnblogs.com/cglongge/p/8384689.html
Copyright © 2020-2023  润新知