zoukankan      html  css  js  c++  java
  • bzoj2464 小明的游戏

    Description

    小明最近喜欢玩一个游戏。给定一个n * m的棋盘,上面有两种格子#和@。游戏的规则很简单:给定一个起始位置和一个目标位置,小明每一步能向上,下,左,右四个方向移动一格。如果移动到同一类型的格子,则费用是0,否则费用是1。请编程计算从起始位置移动到目标位置的最小花费。

    Input

        输入文件有多组数据。
        输入第一行包含两个整数n,m,分别表示棋盘的行数和列数。
        输入接下来的n行,每一行有m个格子(使用#或者@表示)。
        输入接下来一行有四个整数x1, y1, x2, y2,分别为起始位置和目标位置。
    当输入n,m均为0时,表示输入结束。

    Output

        对于每组数据,输出从起始位置到目标位置的最小花费。每一组数据独占一行。
    spfa求最短路
     
    #include<cstdio>
    #include<queue>
    int n,m,x1,y1,x2,y2;
    char s[505][505];
    int l[505][505];
    bool in[505][505];
    struct pos{
        int x,y;
    };
    std::queue<pos>q;
    int xs[]={-1,0,1,0};
    int ys[]={0,-1,0,1};
    int main(){
        while(1){
            scanf("%d%d",&n,&m);
            if(n+m==0)break;
            for(int i=1;i<=n;i++)scanf("%s",s[i]+1);
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            for(int i=1;i<=n;i++){
                for(int j=1;j<=m;j++){
                    l[i][j]=2147483647;
                }
            }
            l[++x1][++y1]=0;
            q.push((pos){x1,y1});
            while(!q.empty()){
                pos w=q.front();q.pop();
                int x=w.x,y=w.y;
                in[x][y]=0;
                for(int i=0;i<4;i++){
                    int xx=x+xs[i],yy=y+ys[i];
                    if(!s[xx][yy])continue;
                    if(s[xx][yy]!=s[x][y]){
                        if(l[x][y]+1<l[xx][yy]){
                            l[xx][yy]=l[x][y]+1;
                            if(!in[xx][yy])q.push((pos){xx,yy}),in[xx][yy]=1;
                        }
                    }else{
                        if(l[x][y]<l[xx][yy]){
                            l[xx][yy]=l[x][y];
                            if(!in[xx][yy])q.push((pos){xx,yy}),in[xx][yy]=1;
                        }
                    }
                }
            }
            printf("%d
    ",l[x2+1][y2+1]);
        }
        return 0;
    }
  • 相关阅读:
    python基础三大器之装饰器
    python基础之推导式及匿名函数和高阶函数
    python基础之三大器中迭代器和生成器
    python基础之函数(动态参数,注释,名称空间,第一类对象及使用和函数嵌套)
    python基础之初识函数
    python基础之文件操作
    python基础之集合及基础补充(循坏删除,二次编码)
    Python基础之小数据池及深浅拷贝
    python基础之字典
    数据结构-栈
  • 原文地址:https://www.cnblogs.com/ccz181078/p/5218235.html
Copyright © 2011-2022 走看看