• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ACM PKU 1915 Knight Moves 典型的寬度優(yōu)先搜索 BFS

            http://acm.pku.edu.cn/JudgeOnline/problem?id=1915
            發(fā)現(xiàn)用vector來(lái)做寬搜的隊(duì)列,要比自己弄一個(gè)隊(duì)列來(lái)記錄方便得多,呵呵
            程序很簡(jiǎn)單,關(guān)鍵地方我都注釋上了
            Source Code

            Problem: 
            1915  User: lnmm 
            Memory: 1560K  Time: 156MS 
            Language: C
            ++  Result: Accepted 

            Source Code 
            #include 
            <iostream>
            #include 
            <vector>
            using namespace std;
            int  mapSize,beginX,beginY,EndX,EndY;     
            int minMoves[301][301];   
            int index;
            bool find;
            struct point  
            {
                
            int x;
                
            int y;
            }
            tempPoint; 
            vector 
            <point> vec;      // 靈活應(yīng)用vector.push_back(),即放到隊(duì)尾 (比較.push()入棧) ;用index來(lái)控制處理順序
            void deal(int x,int y,int times)
             
            {
                 
            if(x==EndX&&y==EndY) 
                  

                        find
            =true;
                        
            return;
                 }
              
                
               
                  
            if(x-2>=0&&y-1>=0&&minMoves[x-2][y-1]==-1)            //如果 某種走法沒(méi)有超過(guò)棋盤(pán)界限 且 那一格沒(méi)有走過(guò)
                    
                        minMoves[x
            -2][y-1]=times+1;
                        tempPoint.x
            =x-2;
                        tempPoint.y
            =y-1;
                        vec.push_back(tempPoint);
                   }

                  
            if(x-2>=0&&y+1<mapSize&&minMoves[x-2][y+1]==-1
                     
            {
                        minMoves[x
            -2][y+1]=times+1;
                        tempPoint.x
            =x-2;
                        tempPoint.y
            =y+1;
                        vec.push_back(tempPoint);
                    }

                  
            if(x+2<mapSize&&y+1<mapSize&&minMoves[x+2][y+1]==-1
                    
            {
                        minMoves[x
            +2][y+1]=times+1;
                        tempPoint.x
            =x+2;
                        tempPoint.y
            =y+1;
                        vec.push_back(tempPoint);
                   }

                  
            if(x+2<mapSize&&y-1>=0&&minMoves[x+2][y-1]==-1)
                   
            {
                        minMoves[x
            +2][y-1]=times+1;
                        tempPoint.x
            =x+2;
                        tempPoint.y
            =y-1;
                        vec.push_back(tempPoint);       
                  }

                  
            if(x-1>=0&&y-2>=0&&minMoves[x-1][y-2]==-1)
                     
            {
                        minMoves[x
            -1][y-2]=times+1;
                        tempPoint.x
            =x-1;
                        tempPoint.y
            =y-2;
                        vec.push_back(tempPoint);
                    }

                  
            if(x-1>=0&&y+2<mapSize&&minMoves[x-1][y+2]==-1
                    
            {
                        minMoves[x
            -1][y+2]=times+1;
                        tempPoint.x
            =x-1;
                        tempPoint.y
            =y+2;
                        vec.push_back(tempPoint);
                   }

                  
            if(x+1<mapSize&&y-2>=0&&minMoves[x+1][y-2]==-1)
                   
            {
                        minMoves[x
            +1][y-2]=times+1;
                       tempPoint.x
            =x+1;
                        tempPoint.y
            =y-2;
                        vec.push_back(tempPoint);
                    }

                  
            if(x+1<mapSize&&y+2<mapSize&&minMoves[x+1][y+2]==-1)
                    
            {
                        minMoves[x
            +1][y+2]=times+1;
                        tempPoint.x
            =x+1;
                        tempPoint.y
            =y+2;
                        vec.push_back(tempPoint);
                   }

            }


            int main()
             
            {
             
            int nCase;
             cin
            >>nCase;
             
            while(nCase--)
              
            {
                    cin
            >>mapSize;
                    cin
            >>beginX>>beginY;
                    cin
            >>EndX>>EndY;
                    find
            =false;   //初識(shí)設(shè)置索引是0
                    index=0;
                    memset(minMoves,
            -1,sizeof(minMoves)); //設(shè)置所有點(diǎn)未走過(guò)
                    minMoves[beginX][beginY]=0;   //設(shè)置起點(diǎn)已走過(guò),步數(shù)是0
                    vec.clear();
                    point tempPoint;
                    tempPoint.x
            =beginX;
                    tempPoint.y
            =beginY;
                    vec.push_back(tempPoint);
                    
            while(index<vec.size()&&!find)   //vec里還有元素未處理完 且 沒(méi)有找到   vec.size() range from 0 to vex.size-1
                    {
                    deal(vec[index].x,vec[index].y,minMoves[vec[index].x][vec[index].y]);
                    index
            ++;       
                    }
             
                    cout
            <<minMoves[EndX][EndY]<<endl;
             }
                
                
            return 0;
            }

            posted on 2007-11-16 15:37 流牛ζ木馬 閱讀(2967) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            MY Email/MSN :mars1021@163.com QQ : 27402040 流牛ζ木馬

            常用鏈接

            留言簿(6)

            隨筆檔案

            相冊(cè)

            搜索

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            人妻精品久久久久中文字幕一冢本| 波多野结衣久久| 欧美牲交A欧牲交aⅴ久久| 精品久久久久久无码不卡| 久久久中文字幕日本| 精品久久国产一区二区三区香蕉| 2021精品国产综合久久| 99久久99这里只有免费的精品| 亚洲精品国精品久久99热一| 狠狠综合久久综合88亚洲| 亚洲精品美女久久久久99小说 | 久久人妻少妇嫩草AV蜜桃| 久久婷婷国产麻豆91天堂| 久久免费美女视频| 久久综合中文字幕| 国产精品美女久久久久av爽| 久久国产热这里只有精品| 久久精品国产亚洲AV不卡| 亚洲欧洲精品成人久久奇米网| 欧美日韩中文字幕久久久不卡 | 伊人久久大香线蕉AV一区二区 | 无码人妻久久久一区二区三区| 蜜桃麻豆WWW久久囤产精品| 久久久久亚洲AV无码观看| 色综合久久久久综合体桃花网| 麻豆成人久久精品二区三区免费| 72种姿势欧美久久久久大黄蕉| 91精品国产91久久久久久蜜臀| 久久播电影网| 久久99久国产麻精品66| 久久99国产精品尤物| 国产综合精品久久亚洲| 国产精品中文久久久久久久 | 浪潮AV色综合久久天堂| 久久免费国产精品一区二区| 久久国产成人精品国产成人亚洲| 久久这里的只有是精品23| 精品久久久久久国产潘金莲| 国产精品嫩草影院久久| 久久精品亚洲AV久久久无码| 国产精品久久久久久|