zoukankan      html  css  js  c++  java
  • hdu 1372 & poj 2243(bfs)

    http://poj.org/problem?id=2243 

    擦了个擦的,N久前在杭电上做的这题0ms,到poj上一交直接超时!poj根本不让用stl啊。。

      没办法,只能模拟队列又乱敲了遍。

    code1: 

    #include<cstdio>
    #include<queue>
    using namespace std ;
    char bstr[3], estr[3] ;
    int b[2], e[2] ;
    int tur[8][2] = {-1, -21, -2, -2, -12, -1, -1212, -2121} ;
    struct Point{
        int x ;
        int y ;
        int step ;
    };
    void bfs(){
        Point begin ;
        begin.x = b[0] ;
        begin.y = b[1] ;
        begin.step = 0 ;
        queue<Point> q ;
        q.push(begin) ;
        while(!q.empty()){
            Point p = q.front() ;
            q.pop() ;
            for(int k=0; k<8; k++){
                Point temp = p ;
                temp.x += tur[k][0] ;
                temp.y += tur[k][1] ;
                if(temp.x<0||temp.x>7||temp.y<0||temp.y>7)
                    continue ;
                temp.step ++ ;
                if(temp.x==e[0]&&temp.y==e[1]){
                    printf("To get from %s to %s takes %d knight moves.\n", bstr, estr, temp.step) ;
                    return ;
                }
                q.push(temp) ;
            }
        }
        return ;
    }
    int main(){
        while(~scanf("%s%s", bstr, estr)){
            b[0] = bstr[0] - 'a' ;
            b[1] = bstr[1] - '1' ;
            e[0] = estr[0] - 'a' ;
            e[1] = estr[1] - '1' ;
            bstr[2] = '\0' ;//用%s输出字符数组必须封好
            estr[2] = '\0' ;
            if(b[0]==e[0]&&b[1]==e[1]){
                printf("To get from %s to %s takes %d knight moves.\n", bstr, estr, 0) ;
                continue ;
            }
            bfs() ;
        }
        return 0 ;


    code2:

    #include<cstdio>
    using namespace std ;
    char bstr[3], estr[3] ;
    int b[2], e[2] ;
    int tur[8][2] = {-1, -21, -2, -2, -12, -1, -1212, -2121} ;
    struct Point{
        int x ;
        int y ;
        int step ;
    }q[10000] ;
    void bfs(){
        Point begin ;
        int h, r ;
        h = 0, r = 1 ;
        begin.x = b[0] ;
        begin.y = b[1] ;
        begin.step = 0 ;
        q[0] = begin ;
        while(r>h){
            Point p = q[h++] ;
            for(int k=0; k<8; k++){
                Point temp = p ;
                temp.x += tur[k][0] ;
                temp.y += tur[k][1] ;
                if(temp.x<0||temp.x>7||temp.y<0||temp.y>7)
                    continue ;
                temp.step ++ ;
                if(temp.x==e[0]&&temp.y==e[1]){
                    printf("To get from %s to %s takes %d knight moves.\n", bstr, estr, temp.step) ;
                    return ;
                }
                q[r++] = temp ;
            }
        }
        return ;
    }
    int main(){
        while(~scanf("%s%s", bstr, estr)){
            b[0] = bstr[0] - 'a' ;
            b[1] = bstr[1] - '1' ;
            e[0] = estr[0] - 'a' ;
            e[1] = estr[1] - '1' ;
            bstr[2] = '\0' ;//用%s输出字符数组必须封好
            estr[2] = '\0' ;
            if(b[0]==e[0]&&b[1]==e[1]){
                printf("To get from %s to %s takes %d knight moves.\n", bstr, estr, 0) ;
                continue ;
            }
            bfs() ;
        }
        return 0 ;

    }

  • 相关阅读:
    Fatal error: Call to undefined function json_decode()解决办法
    LoadRunner 压力测试使用基础步骤
    访问网站出现 HTTP ERROR 500 该网页无法正常运作
    Linux Crontab Shell脚本实现秒级定时任务
    Linux下修改MySQL数据表中字段属性
    PHP实现微信企业付款
    Yii1.1框架实现PHP极光推送消息通知
    nginx的The page you are looking for is temporarily unavailable错误解决办法
    Linux提示删除文件cannot remove `文件名': Operation not permitted
    Linux常用软件启动、停止、重启命令
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2264485.html
Copyright © 2011-2022 走看看